我正在学习C语言,并坚持如下问题:
#include<stdio.h>
#include<conio.h>
void main()
{
short int a=5;
clrscr();
printf("%d"+1,a);
getch();
}
请解释这个程序的输出是什么。 谢谢。
答案 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