我已经读过字符串文字的类型是char [n + 1],其中n是长度。字符串文字的存储是一个实现问题。但它仍然必须是唯一的。
printf
("%u\t %s\t %d\t %c\t %f\t %e\t %x\t %p\t",
&"XY",&"XY",&"XY",&"XY",&"XY",&"XY",&"XY",&"XY");
此代码的输出是
4206628 XY 4206628 $ 0.000000 1.800980e-307 7ffde000 00000032
为什么%f
给出零,%s
给出XY(&
无效?),%p
给出完全不同的值?
答案 0 :(得分:2)
您不能传递错误类型的值(与格式说明符所说的不匹配的类型),也不能传递未定义的行为。
例如,很有可能double
%f
所期望的是更大而不是指针(实际上是你实际上)传递的那个,因此领先传递的值与printf()
消耗的值之间的不匹配,以及或多或少的混乱。
答案 1 :(得分:1)
为什么
%f
给出零?
由于%f
期望double
而不是%s
,因此会导致未定义的行为。
XY
给出了&
(arr
没有效果?)
可能是因为对于数组arr
:&arr
和printf
具有相同的值。但是,类型不同,这意味着您将意外类型再次传递给%p
,未定义的行为。
和{{1}}给出了完全不同的值?
这是你要找的指针值。