多维数组的内存模型

代码演示

#include <stdio.h>
#include "stdlib.h"
#include "string.h"

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

    
    /**
     *  多维数组
     */
    int a[3][5],i = 0,j=0;
    int tmp = 1;
    for (int i = 0; i<3; i++) {
        for (j = 0; j<5; j++) {
            a[i][j] = tmp++;
        }
    }
    for (int i = 0; i<3; i++) {
        for (j = 0; j<5; j++) {
            printf("%d ",a[i][j]);
        }
    }
    printf("a :%d a+1:%d ",a,a+1);//步长是20字节  5*4;
    printf("a :%d a+1:%d ",&a,&a+1);//步长是60字节
    
    
    /**
     *  定义一个指向数组的指针变量
     */
    int (*pArray)[1];//告诉编译器 分配8个字节 在64位平台下
    printf("-->%lu\n",sizeof(pArray));
    pArray = a;
    for (int i = 0; i<3; i++) {
        for (j = 0; j<5; j++) {
            printf("%d ",pArray[i][j]);
        }
    }
    
    /**
     *  多维数组名的本质 就是一个数组指针
     */
    /**
     *  a+i  代表整个第i个元素的地址. 二级指针
        *(a+i) 代表一级指针  第i行元素的地址
        *(a+i)+j 代表第i行的第j个元素的地址.  ====a[i][j]
     */
    return 0;
}

内存模型图

1ACD43C1-E5A4-49FD-9CE6-823A2056CB69.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容