printf()的行为

时间:2014-01-22 18:07:24

标签: c printf

#include <stdio.h>

int main()
{

    printf(5 + "Good Morning\n");

    return 0;
}

代码打印出晨。代码应该打印早上还是应该显示未定义的行为?

2 个答案:

答案 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 >----------------------