0

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

4 回答 4

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 告诉您该数组的位置。

一个 3 维数组只比这更高一层:一个数组数组的数组

                    ----------------------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 个二维数组,然后到那个二维数组的第 y 个 1d 数组,然后到这个数组中的第 x 个位置。

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

于 2012-11-26T10:48:25.053 回答
1

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

于 2012-11-26T10:42:27.653 回答
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
于 2012-11-26T10:43:39.677 回答
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。

于 2012-11-26T10:49:19.650 回答