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