以下代码将输出显示为“d”:
void main()
{
short int a=5;
printf("%d"+1,a);
getch();
}
printf()
如何实际运作?
答案 0 :(得分:6)
printf
没有“看到”格式说明符,因为您传递的指针是"%d"
加一。这相当于自己传递"d"
:
printf("d", a);
将打印d
并忽略a
。这不是printf
特有的,指针算法与所有char
指针一样,包括从字符串文字中获得的指针(即双引号字符序列)。
答案 1 :(得分:3)
这里是问题printf("%d"+1,a);
它不会显示,因为只有一种格式
说明符和此(“%d”+1)生成错误
可以是printf("%d+1",a);
或printf("%d",a+1);
答案 2 :(得分:1)
字符串文字(例如“%d”)是数组表达式,并且在大多数上下文中,数组表达式将转换为指针表达式,其值是数组的第一个元素的地址: / p>
Item Address 00 01 02 03 ----- ------- -- -- -- -- "%d" 0xfffbec00 '%' 'd' 0 ??
字符串文字“%d”从地址0xfffbec00开始(例如)。通过编写"%d"+1
,您将结果指针值(给出0xfffbec01)加1,因此您有效地将字符串文字“d”传递给printf
。
由于字符串“d”不包含格式说明符,printf
按原样打印字符串。在传递给a
之前,参数printf
被评估,否则将被忽略。