💚💚💚 下面我用图来分析一下


{
int (*p[5])[2];
int element[2] = {1, 2};
p[0] = &element;
// 输出element 数组元素
printf("element[0]: %d\n", (*p[0])[0]); //1
printf("element[1]: %d\n", (*p[0])[1]); // 2
printf("p[0][0] address: %p\n", p[0][0]);
printf("element[0] address: %p\n", &element[0]);
printf("p[0][1] address: %p\n", p[0][1]);
printf("element[1] address: %p\n", &element[1]);
int element_2[2] = {3, 4};
p[1] = &element_2;
// element_2 数组元素
printf("\n\nelement_2[0]: %d\n", (*p[1])[0]); //3
printf("element_2[1]: %d\n", (*p[1])[1]); // 4
printf("p[1][0] address: %p\n", p[1][0]);
printf("element_2[0] address: %p\n", &element_2[0]);
printf("p[1][1] address: %p\n", p[1][1]);
printf("element_2[1] address: %p\n", &element_2[1]);
}
// 打印结果
element[0]: 1
element[1]: 2
p[0][0] address: 000000000061fdb8
element[0] address: 000000000061fdb8
p[0][1] address: 000000000061fdc0
element[1] address: 000000000061fdbc
element_2[0]: 3
element_2[1]: 4
p[1][0] address: 000000000061fdb0
element_2[0] address: 000000000061fdb0
p[1][1] address: 000000000061fdb8
element_2[1] address: 000000000061fdb4
老规矩,还是上图比较清晰,直观

其实C中不存在多维数组,那些看起来像多维数组其实就是“数组的数组”。这个多维数组通常使用 hoge[i][j] 来访问。
我们还是通过一张图,来看看多维数组在内存中的布局。

💚💚💚