三维数组中的索引元素
可能重复:
如何在C ++中使用数组?
在以下代码段中:
int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
什么是[i],[i] [j]的答案,其中i <= 1且j <= 2我对理解a [i] [j] [k]工作没有任何问题。你可以请解释上面的索引是如何工作的?
你必须记住的是,你正在使用2个不同的对象。
a[i][j][k]
和
a[i][j], a[i] and a
第一个是int,另外3个是指针
相关的内存看起来像这样:
a : | a[0] | a[1]| \/ \______________________ a[] : | a[0][0] | a[0][1] | a[0][2] | a[1][0] | a[1][1] | a[1][2] | \/ \______________ a[][] : | a[0][0][0] | a[0][0][1] | a[0][1][0] | a[0][1][1] | ...
等等…
现在在示例中,您可以使用指针进行算术运算,例如。 a[1] - a[0] = 3
。 如果你看一下相关的内存,你可以看到2个指针之间有3个内存位置,因此结果为3。
我不完全确定你的问题是什么,但我会尝试向你解释索引:
您在示例中创建的是三维数组(或者如果您愿意,则为嵌套数组)。
我确定你理解如下的简单数组
---x--- int a[3] = {1, 2, 3};
现在,当您请求a[x]
,x将确定选择arrays的哪个位置。
二维arrays仅仅是arraysarrays
---------y-------- ---x--- ---x--- int b[2][3] = {{1, 2, 3}, {4, 5, 6}};
当你请求b[y][x]
,y将确定选择两个一维数组中的哪一个,然后x告诉你该数组的哪个位置。
三维数组只增加了这一级:数组数组
----------------------z-------------------- ---------y--------- ---------y--------- ---x--- ---x--- ---x--- ---x---- int c[2][2][3] = {{{1, 2, 3}, {4, 5, 6}}, {{1, 2, 3}, {4, 5, 6}} };
现在,对c[z][y][x]
的请求转到第z个2darrays,然后转到该2darrays的第y个1darrays,然后转到该arrays中的第x个位置。
对c[z]
或c[z][y]
的请求只会产生数组的地址,而不会产生任何实际的int值。
a [i]和[i] [j]是地址,它与int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
指定的值无关int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};
。 这意味着[1] -a [0]是a指向的第二个数组与第一个数组之间的字节数。
a[0] = {{1,2},{9,8},{3,7}} a[1] = {{2,2},{1,4},{5,4}} a[0][0] = {1,2}, a[0][1] = {9,8}, a[0][2] = {3,7} a[0][0][0] = 1, a[0][0][1] = 2, a[0][1][0] = 9, a[0][1][1] = 8, a[0][2][0] = 3, a[0][2][1] = 7 a[1][0] = {2,2}, a[1][1] = {1,4}, a[1][2] = {5,4} a[1][0][0] = 2, a[1][0][1] = 2, a[1][1][0] = 1, a[1][1][1] = 4, a[1][2][0] = 5, a[1][2][0] = 4