5

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

void main()
{

  short int a=5;

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

   getch();

}

实际效果如何printf()

4

3 回答 3

6

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

printf("d", a);

将打印d并忽略a. 这不是特定于printf,指针算术与所有char指针一样工作,包括从字符串文字(即双引号字符序列)获得的指针。

于 2012-09-27T15:59:34.163 回答
3

这是printf("%d"+1,a);它不会显示的问题,因为只有一个格式说明符,并且 ("%d"+1) 会生成错误

它可以是printf("%d+1",a);或者printf("%d",a+1);

于 2012-09-27T15:59:24.197 回答
1

诸如“%d”之类的字符串字面量是数组表达式,在大多数情况下,数组表达式将被转换为指针表达式,其值是数组第一个元素的地址:

项目地址 00 01 02 03
----- -------- -- -- -- --
"%d" 0xfffbec00 '%' 'd' 0 ??

字符串文字“%d”从地址 0xfffbec00 开始(例如)。通过编写"%d"+1,您将 1 添加到结果指针值(给出 0xfffbec01),因此您有效地将字符串文字“d”传递给printf.

由于字符串“d”不包含格式说明符,printf因此按原样打印字符串。该参数在传递给之前进行a评估printf否则将被忽略。

于 2012-09-27T16:46:44.263 回答