C语言printf输出问题.....

char *p = "asd";
printf(p);
明明定义printf的时候,是printf("const char*format",...)
应该是常量指针,我又没有定义成常量,怎么程序还能用啊?

(1) p指针可以修改,但是“asd”是一个字符串常量,p获取到的值是这个字符串常量的地址值
(2) printf中的参数是要求用const值,这个要求只是说明printf函数不会修改这个参数的值而已,跟p是不是const指针没有任何关系

这里const是指被调用者来说的,也就是printf内部不能修改。对于调用者没有限制

你这里p其实就是const char*
虽然没有直接指定。
但编译器会这么做。

char *p = "asd";这是给指针变量初始化吗?可是初始化不是要初始化一个地址吗?

“asd”就是常量,p就是这个常量的指针。

printf("const char*format",...)代表printf函数对指针所引用的变量只能读,不能修改。安全原因。
如果没有const,printf函数就可以修改引用变量的值。如果你愿意的话,可以修改printf函数来改变

(1)p指针可以修改,但是“asd”是一个字符串常量,p获取到的值是这个字符串常量的地址值
(2) printf中的参数是要求用const值,这个要求只是说明printf函数不会修改这个参数的值而已,跟p是不是const指针没有任何关系
是这样哦

可变量可以自动转化为常量,但常量不能转化为变量。如int可以转化为const int,但const int 不能转化为int (除非你强制转化)。

非const指针可以传递给要求参数是const指针的函数。(相当于增加了const属性)
反过来编译器会报warning,说const属性丢失。

const 修饰的是不能修改该变量值

p 定义成了一个指针常量