2012-09-27 67 views
5

下面的代码给我的输出作为 'd':C “%d” 格式说明

void main() 
{ 

    short int a=5; 

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

    getch(); 

} 

如何printf()实际工作?

+0

http://kkmaterials.blogspot.in/2012/06/printf-function-questions-and-answer.html我想,这里也提出了同样的问题。在问这里之前试着搜索你的问题。 比发布与本网站相同的值的问题,并不意味着你做了任何功课。 –

回答

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,但被忽略。