黑马程序员技术交流社区

标题: 数组的内存分析 [打印本页]

作者: Two_Lights    时间: 2016-1-11 08:16
标题: 数组的内存分析
#include <stdio.h>



int main(int argc, const char * argv[]) {



    //定义一个二维数组
    int arr[2][3] = {
        {1,2,3},   //   arr[0]   第一行
        {4,5,6}    //    arr[1]  第二行
    };

    for (int i= 0; i < 2; i++) {

        for (int j = 0; j < 3; j++) {

            printf("%p ",&arr[j]);

        }

        printf("\n");

    }


    /*
     arr[0][0]
     0x7fff5fbff770 0x7fff5fbff774 0x7fff5fbff778    ---->  arr[0]
     0x7fff5fbff77c 0x7fff5fbff780 0x7fff5fbff784    ---->  arr[1]
     */

    printf("--------------\n");

    //  &arr ==  arr  ==  arr[0]  == &arr[0] ==  &arr[0][0]  --->  数组的首地址

    printf("&arr =       %p\n",&arr);  //   整个数组的地址
    printf("arr =        %p\n",arr);   //   数组名--> 第一行元素的地址 (行地址) --> &arr[0]
    printf("arr[0] =     %p\n",arr[0]);//   第一行第一个元素的地址  -->  & arr[0][0]
    printf("&arr[0] =    %p\n",&arr[0]);//  第一个元素的地址 (行地址)
    printf("&arr[0][0] = %p\n",&arr[0][0]); //第一行第一个元素的地址

    printf("--------------\n");

    printf("&arr+1 =       %p\n",&arr+1);  //  以整个数组为长度 + 1  越界  0x7fff5fbff788
    printf("arr+1 =        %p\n",arr+1);   //  以第一行元素为长度+1        0x7fff5fbff77c
    printf("arr[0]+1 =     %p\n",arr[0]+1);//  以第一行第一个元素为长度+1   0x7fff5fbff774
    printf("&arr[0]+1 =    %p\n",&arr[0]+1);// 以第一行元素为长度+1        0x7fff5fbff77c
    printf("&arr[0][0]+1 = %p\n",&arr[0][0]+1); //以第一行第一个元素为长度+1   0x7fff5fbff774




    return 0;
}


作者: yangqi    时间: 2016-1-11 11:03
很好,看懂了前面一半{:2_34:}
作者: 海棠依旧2046    时间: 2016-1-11 12:15
分析内存真的很抽象啊,头大




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