#include <stdio.h>
int main()
{
printf(5 + "Good Morning\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码打印出晨.代码应该打印早上还是应该显示未定义的行为?
abl*_*igh 10
它应该显示'早上'.
你正在使用指针算法 - 虽然你似乎不知道它!"Good Morning\n"是一个char *指向常量字符串的指针.然后,您将5添加到此指针,使其前进5个字符.因此指针现在指向'早上'的'M'.
代码是正确的,因为printf定义为:
int printf ( const char * format, ... );
Run Code Online (Sandbox Code Playgroud)
并且根据指针arithmitic 5 + "Good Morning\n"是指向第一个元素的指针"Morning\n".所以声明:
printf(5 + "Good Morning\n");
Run Code Online (Sandbox Code Playgroud)
结果与:
printf("Morning\n");
Run Code Online (Sandbox Code Playgroud)
说明:
|G|o|o|d| |M|o|r|n|i|n|g|\n|
^ ^
| |
"Good Morning\n" >---- |
+ |
5 >----------------------
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |