C语言中的"%d"格式说明符

5
以下代码输出结果为“d”:
void main()
{

  short int a=5;

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

   getch();

}
< p > printf() 函数是如何工作的?< /p >

我认为这个问题已经在这里被问过了。在这里提问之前,请尝试搜索您的问题。如果您只是发布与此网站相同的值的问题,那并不意味着您已经做了任何功课。 - Ratan Kumar
3个回答

6

printf 没有“看到”格式说明符,因为您传递了指向 "%d" 加一的指针。这相当于仅传递 "d"

printf("d", a);

将会打印 d 并忽略 a。这不仅仅适用于 printf ,指针算术运算对所有的 char 指针都是如此,包括从字符串字面量(即由双引号括起来的字符序列)获取的指针。


3
这是一个问题:printf("%d"+1,a);无法显示,因为只有一个格式说明符,而这个 ("%d"+1) 会生成错误。
可以使用以下两种方式之一:printf("%d+1",a); 或者 printf("%d",a+1);

1

类似于 "%d" 的字符串字面量是 数组表达式,在大多数情况下,数组表达式会被转换为指针表达式,其值为数组的第一个元素的地址:

Item        Address        00   01   02   03
-----       -------        --   --   --   --
"%d"        0xfffbec00     '%'  'd'   0   ??

例如,字符串字面量 "%d" 开始的地址是 0xfffbec00。通过写入 "%d"+1,您将 1 添加到结果指针值(得到 0xfffbec01),因此您实际上传递了字符串字面量 "d" 给 printf

由于字符串 "d" 不包含格式说明符,printf 将字符串原样打印。参数 a 在传递给 printf 之前会被 求值,但否则会被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接