:
string array3d1[x][y][z];
据我所知,在堆栈内部,它实际上是一维数组。
堆上的:
string * * * array3d2;
array3d2 = new string * * [x];
for (int i = 0; i < x; i++)
{
array3d2[i] = new string * [y];
for (int j = 0; j < y; j++)
{
array3d2[i][j] = new string [z];
}
}
在堆上它的数组数组。
问题:
(1)array3d1 [a] [b] [c]的索引是什么?
(2)当我使用以下语法访问array3d1和array3d2时:
array3d1[a][b][c];
和
array3d2[a][b][c];
编译器如何知道正确的访问元素,因为它们处于不同的布局中?
答案 0 :(得分:1)
array3d1 [a] [b] [c]的索引是什么?
如果您的意思是&array3d1[a][b][c] - (string*)array3d1
的价值是什么,则它等于a*y*z + b*z + c
。
编译器如何知道要访问的正确元素,因为它们处于不同的布局中?
编译器知道,因为array3d1
和array3d2
有不同的类型。
array3d1
的类型为array of size x of arrays of size y of arrays of size z of string
,因此array3d1[a]
的类型为array of size y of arrays of size z of string
,位于原始数组的a
索引处,即{{1} }} a*y*z
从一开始。等应用其他指数。
string*
的类型为array3d2
,索引也相应完成。