A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 悄然林静 中级黑马   /  2016-7-27 23:24  /  1360 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[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~~

4 个回复

倒序浏览
补充:printf函数明明只打印了ch2啊,我试着交换ch和ch2的位置,就只打印a
回复 使用道具 举报
因为数组在内存的储存是高地址到低地址,后声明的数组,其地址是更高,然后%s打印字符串,它会自动取到内存中\0的元素或者在没有\0的情况下一直去到底才会停止,结合老师讲过的那个数组在内存中的储存图相信你可以理解的,么么哒
回复 使用道具 举报
这两个数组在栈区是连续的
a[]在高字节,b[]在低字节;

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

如果想要打印出ch2[]中的元素 ,可以对ch2进行遍历.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马