2 crazymonk CrazyMonk 于 2015.05.25 22:47 提问

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

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

11个回答

HuntCode
HuntCode   2015.05.26 09:14
已采纳

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

devmiao
devmiao   Ds   Rxr 2015.05.25 22:48

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

oyljerry
oyljerry   Ds   Rxr 2015.05.25 22:59

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

Ollzo
Ollzo   2015.05.25 23:01

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

lijinxiong520
lijinxiong520 这既是啊,程序运行时,把字符串asd分配了一个空间,然后*p="asd",就是给地址p
2 年多之前 回复
a1193561652
a1193561652   Rxr 2015.05.25 23:38

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

frank_20080215
frank_20080215   2015.05.26 06:15

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

monaso
monaso   2015.05.26 13:16

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

gaofei_1994
gaofei_1994   2015.05.26 20:53

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

nswcfd
nswcfd   2015.05.27 23:01

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

u012377333
u012377333   Rxr 2015.05.28 18:46

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

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片