解释以下程序的输出

时间:2017-10-06 06:00:28

标签: c

#include<stdio.h>
void main()
{
printf(5+"good morning");/*need explanation for this line
return 0;
}

该计划的输出是 - 早上 任何人都可以解释一下吗?

4 个答案:

答案 0 :(得分:1)

printf

的原型
int printf(const char *format, ...);

此处formatconst char*的一种类型,并指向字符串文字的第一个元素的地址。当您在5+"Good morning"中传递printf时,您实际传递的是字符串的内存地址加5。加号5表示打印将在字符串开头之后开始5 chars,而单词“Good”之后的空格将计为字符。

答案 1 :(得分:1)

当您使用5+"good morning"参数调用时转换为指针。这意味着在可执行文件中的某处存储了字符串常量"good morning",并且编译器传递其指针。像这样的东西:

const char txt[]="good morning\0";
printf(5+txt);

因此printf将获得评估指针txt+5,该指针绕过字符串中的前5个字符(因为一个字符是8位WORD寻址机上的单个字节和单个内存地址)。

答案 2 :(得分:0)

  

该计划的输出是 - 上午

printf(5+"good morning");

将字符串打印在" " overpassing 前五个字符中。因此,前四个字符good和第五个字符(空格)将被覆盖,其余字符串将被打印。< / p>

答案 3 :(得分:0)

Printf()方法,用于在()

中打印文本

仅打印&#34;早上&#34;并且5+绕过最初的5个字符,即&#34; g&#34; &#34; O&#34; &#34; O&#34; &#34; d&#34;和一个&#34; &#34; (空间)