找到C程序的输出

时间:2013-11-22 11:49:34

标签: c output

我正在学习C语言,并坚持如下问题:

#include<stdio.h>
#include<conio.h>
void main()
{
short int a=5;
clrscr();
printf("%d"+1,a);
getch();
}

请解释这个程序的输出是什么。 谢谢。

2 个答案:

答案 0 :(得分:6)

"%d"是一个const char*,指向"%d"的第一个字符。

"%d" + 1是一个const char*,指向"%d"的第二个字符(即字符串"d")。

"d"作为格式传递给printf打印d,无论您传递给printf的其他参数如何。

答案 1 :(得分:4)

让我们看另一种方式:

#include<stdio.h>
#include<conio.h>
void main()
{
short int a=5;
clrscr();
char const * string = "%d";
char const * newString = string + 1;
printf(newString,a);
getch();
}

输出为'd',因为'string'是一个指针,指向'%'的地址。如果将此指针递增1,要获得“newString”,它将指向字符“d”。这就是输出为'd'的原因,而printf基本上丢弃了它的第二个参数。

内存布局如下(注意终止零字符'\ 0'):

[%] [d] [\0]
 ^   ^
 |   |
 |   newString
string