C“%d”格式说明符

时间:2012-09-27 15:57:53

标签: c format-specifiers

以下代码将输出显示为“d”:

void main()
{

  short int a=5;

   printf("%d"+1,a);

   getch();

}

printf()如何实际运作?

3 个答案:

答案 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评估,否则将被忽略。