黑马程序员技术交流社区

标题: C 字符串 [打印本页]

作者: 粘糊浆    时间: 2015-3-11 19:11
标题: C 字符串
本帖最后由 粘糊浆 于 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里运行的。



作者: 粘糊浆    时间: 2015-3-11 19:14
是在CODE :: blocks里运行的。
作者: passchaos    时间: 2015-3-11 20:14
这两个数组都是分配在内存的栈区的,因此实际上是从高地址到低地址分配的。C语言中不会检查数组是否越界,因此&c1[9]就是从数组开始第十个存储单元,c1数组总共有7个元素,每个元素占一个字节,刚好&c1[9]就是c1数组的地址加9,数组c在数组c1之后紧挨,刚好就是&c[2]。
作者: 粘糊浆    时间: 2015-3-11 20:19
原来 是这样,那OC会检查不?




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