下面的代码给我的输出作为 'd':C “%d” 格式说明
void main()
{
short int a=5;
printf("%d"+1,a);
getch();
}
如何printf()
实际工作?
下面的代码给我的输出作为 'd':C “%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”是数组表达式,并且在多数情况下一个数组表达式将被转换为指针表达式,其值是数组的第一个元件的地址:
Item Address 00 01 02 03 ----- ------- -- -- -- -- "%d" 0xfffbec00 '%' 'd' 0 ??
字符串文字“%d”从地址0xfffbec00开始(例如)。通过编写"%d"+1
,您将得到的指针值加1(给出0xfffbec01),所以您实际上将字符串字符“d”传递给printf
。
由于字符串“d”不包含格式说明符,因此printf
将按原样打印字符串。参数a
是评估之前被传递到printf
,但被忽略。
http://kkmaterials.blogspot.in/2012/06/printf-function-questions-and-answer.html我想,这里也提出了同样的问题。在问这里之前试着搜索你的问题。 比发布与本网站相同的值的问题,并不意味着你做了任何功课。 –