三维数组中的索引元素

时间:2012-11-26 10:23:20

标签: c++ c arrays

  

可能重复:
  How do I use arrays in C++?

在以下代码段中:

int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};

a [i],a [i] [j]的答案是什么,其中i <= 1且j <= 2  我理解a [i] [j] [k]工作没有问题。您能解释一下上述索引是如何工作的吗?

4 个答案:

答案 0 :(得分:3)

我不完全确定您的问题是什么,但我会尝试向您解释索引:

您在示例中创建的是三维数组(如果愿意,还可以是嵌套数组)。

我确信你理解如下的简单数组

            ---x---
int a[3] = {1, 2, 3};

现在,当您请求a[x]时,x将确定选择阵列的哪个位置。

二维数组只是一个数组数组

                ---------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个2d阵列,然后转到该2d阵列的第y个1d阵列,然后转到该阵列中的第x个位置。

c[z]c[z][y]的请求只会产生数组地址,而不会产生任何实际的int值。

答案 1 :(得分:1)

a [i]和[i] [j]是地址,它与int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};中指定的值无关。这意味着[1] -a [0]是a指向的第二个数组与第一个数组之间的字节数。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

你必须记住的是,你正在使用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。