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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Two_Lights 中级黑马   /  2016-1-11 08:16  /  535 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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;
}

2 个回复

倒序浏览
很好,看懂了前面一半{:2_34:}
回复 使用道具 举报
海棠依旧2046 来自手机 中级黑马 2016-1-11 12:15:36
藤椅
分析内存真的很抽象啊,头大
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马