可能重复:
如何在 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] 的工作没有问题。你能请解释上述索引是如何工作的?
可能重复:
如何在 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] 的工作没有问题。你能请解释上述索引是如何工作的?
我不完全确定您的问题是什么,但我会尝试向您解释索引:
您在示例中创建的是一个三维数组(如果您愿意,也可以是一个嵌套数组)。
我确定您了解以下简单数组
---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 值。
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 指向的第二个数组和第一个数组之间的字节数。
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
您必须在这里记住的是,您正在使用 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。