多维数组的内存模型

代码演示

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

内存模型图

多维数组的内存模型_第1张图片
1ACD43C1-E5A4-49FD-9CE6-823A2056CB69.png

你可能感兴趣的:(多维数组的内存模型)