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

© 粘糊浆 中级黑马   /  2015-3-11 19:11  /  856 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 粘糊浆 于 2015-3-11 19:14 编辑

#include <stdio.h>
#include <string.h>
int main()
{
    char c[4] = {'a','b','c','\0'};

    // char  a ='5';
    char c1[] = "agbadf";
     int    length= strlen(c1);
    printf("%p---  %d   %p",&c1[9],length,&c[2]);
}


为什么输出的地址是一样的    是在CODE :: blocks里运行的。


3 个回复

倒序浏览
是在CODE :: blocks里运行的。
回复 使用道具 举报
这两个数组都是分配在内存的栈区的,因此实际上是从高地址到低地址分配的。C语言中不会检查数组是否越界,因此&c1[9]就是从数组开始第十个存储单元,c1数组总共有7个元素,每个元素占一个字节,刚好&c1[9]就是c1数组的地址加9,数组c在数组c1之后紧挨,刚好就是&c[2]。
回复 使用道具 举报
原来 是这样,那OC会检查不?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马