C语言中字符串文字的地址

时间:2013-09-07 10:02:02

标签: c arrays string printf

我已经读过字符串文字的类型是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给出完全不同的值?

2 个答案:

答案 0 :(得分:2)

您不能传递错误类型的值(与格式说明符所说的不匹配的类型),也不能传递未定义的行为。

例如,很有可能double %f所期望的是更大而不是指针(实际上是你实际上)传递的那个,因此领先传递的值与printf()消耗的值之间的不匹配,以及或多或少的混乱。

答案 1 :(得分:1)

  

为什么%f给出零?

由于%f期望double而不是%s,因此会导致未定义的行为。

  

XY给出了&arr没有效果?)

可能是因为对于数组arr&arrprintf具有相同的值。但是,类型不同,这意味着您将意外类型再次传递给%p,未定义的行为。

  

和{{1}}给出了完全不同的值?

这是你要找的指针值。