#include <stdio.h>
int main()
{
int a [2][3][2]={{{1,2},{3,4},{5,6}},{{5,8},{9,10},{11,12}}};
printf("%d\n%d\n%d\n",a[1]-a[0],a[1][0]-a[0][0],a[1][0][0]-a[0][0][0]);
return 0;
}
输出为3 6 4
。谁能向我解释一下原因吗?为什么 a[1]-a[0]=3
和 a[1][0]-a[0][0]=6
以及如何 a[]
和 a[][]
解释为 3 维数组?
最佳答案
如果您了解像您这样的数组如何在内存中布局,这可能会有所帮助:
+------------+ Low address +---------+ Low address +------+ | a[0][0][0] | | a[0][0] | | a[0] | | a[0][0][1] | | | | | | a[0][1][0] | | a[0][1] | | | | a[0][1][1] | | | | | | a[0][2][0] | | a[0][2] | | | | a[0][2][1] | | | | | | a[1][0][0] | | a[1][0] | | a[1] | | a[1][0][1] | | | | | | a[1][1][0] | | a[1][1] | | | | a[1][1][1] | | | | | | a[1][2][0] | | a[1][2] | | | | a[1][2][1] | | | | | +------------+ High address +---------+ High address +------+
那么知道您得到的差异是类型的倍数会有所帮助。所以对于a[0]
和a[1]
类型是int[3][2]
a[0]
之间有三个倍数和a[1]
.
同样适用于a[0][0]
和a[1][0]
,类型为int[2]
,相差六 int[2]
a[0][0]
之间的单位和a[1][0]
.
详细说明一下:a[0]
之间和a[1]
你有a[0][0]
, a[0][1]
和a[0][2]
。三个条目。
之间a[0][0]
和a[1][0]
你有a[0][0][0]
, a[0][0][1]
, a[0][1][0]
, a[0][1][1]
, a[0][2][0]
和a[0][2][1]
。六个条目。
关于c - C 编程中的 3D 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284093/