代码演示
#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
网友评论