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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Eil.tea 中级黑马   /  2015-7-26 23:10  /  427 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

char h[]="123";
sizeof(h)毫无疑问是4;
h[4]='a';
这样的不报错的,只是给了个提示,说数组是包含4个元素。当我打印出这5个元素的地址的时候,我发现前4个地址,是连续的,后边定义的a[4]与上边的地址不连续。我可以理解成a[4],就相当于另外定义的一个变量。
--------------------------我是可爱的分割线--------------------------------
有了上边的结果,我改变了定义
char h[7]="123";
sizeof(h)成了7,可是当我打印出所有元素的地址的时候,我发现,地址依然是前4个连续,后边的不连续。于是我清空了缓存,重新执行了一次,结果还是一样。有谁能解释一下吗?
为什么我定义的数组开辟的空间不连续呢?

2 个回复

倒序浏览
亲测,是连续的
    char ch[7]="123";
    printf("%p\n",&ch[0]);
    printf("%p\n",&ch[1]);
    printf("%p\n",&ch[2]);
    printf("%p\n",&ch[3]);
    printf("%p\n",&ch[4]);
    printf("%p\n",&ch[5]);
    printf("%p\n",&ch[6]);

输出结果:
0x7fff5fbff809
0x7fff5fbff80a
0x7fff5fbff80b
0x7fff5fbff80c
0x7fff5fbff80d
0x7fff5fbff80e
0x7fff5fbff80f
回复 使用道具 举报
围观学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马