#include <stdio.h>
int main()
{
printf(5 + "Good Morning\n");
return 0;
}
代码打印出晨。代码应该打印早上还是应该显示未定义的行为?
答案 0 :(得分:10)
它应该显示'早上'。
你正在使用指针算法 - 虽然你似乎不知道它! "Good Morning\n"
是指向常量字符串的char *
指针。然后,您将5添加到此指针,使其前进5个字符。因此,指针现在指向'早上'的'M'。
答案 1 :(得分:5)
代码是正确的,因为printf
定义为:
int printf ( const char * format, ... );
根据指针arithmitic 5 + "Good Morning\n"
是指向"Morning\n"
的第一个元素的指针。所以声明:
printf(5 + "Good Morning\n");
的结果与:
相同printf("Morning\n");
说明:
|G|o|o|d| |M|o|r|n|i|n|g|\n|
^ ^
| |
"Good Morning\n" >---- |
+ |
5 >----------------------