三维数组中的索引元素

可能重复:
如何在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