黑马程序员技术交流社区

标题: 输出结果看不懂? [打印本页]

作者: 悄然林静    时间: 2016-7-27 23:24
标题: 输出结果看不懂?
[C] 纯文本查看 复制代码
#include <stdio.h>

int main()
{
char ch[2]={'a','\0'};
char ch2[3]={'c','d','e'};

printf("%s\n",ch2);

return 0;
}

运行上面代码之后,为啥结果是cdea呢?不应该是cde的吗?求解惑,3Q~~
作者: 悄然林静    时间: 2016-7-27 23:26
补充:printf函数明明只打印了ch2啊,我试着交换ch和ch2的位置,就只打印a
作者: wc88212    时间: 2016-7-27 23:34
因为数组在内存的储存是高地址到低地址,后声明的数组,其地址是更高,然后%s打印字符串,它会自动取到内存中\0的元素或者在没有\0的情况下一直去到底才会停止,结合老师讲过的那个数组在内存中的储存图相信你可以理解的,么么哒
作者: anan安    时间: 2016-7-30 22:21
这两个数组在栈区是连续的
a[]在高字节,b[]在低字节;

printf("%s\n",ch2);
ch2 是一个指针,不会被当做数组的,所以打印出abcd 是正常的,合理的.
C会认为你就是要打印出 abcd

如果想要打印出ch2[]中的元素 ,可以对ch2进行遍历.





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2