【发布时间】:2010-03-09 19:46:05
【问题描述】:
在 C 中,我想按此顺序循环遍历数组
for(int z = 0; z < NZ; z++)
for(int x = 0; x < NX; x++)
for(int y = 0; y < NY; y++)
3Darray[x][y][z] = 100;
如何创建这个数组,使 3Darray[0][1][0] 在内存中正好位于 3Darray[0][2][0] 之前?
我可以进行初始化以进行“z-major”排序,但我真的想要这个 3d 数组的 y-major 排序
这是我一直在尝试使用的代码:
char *space;
char ***Arr3D;
int y, z;
ptrdiff_t diff;
space = malloc(X_DIM * Y_DIM * Z_DIM * sizeof(char))
Arr3D = malloc(Z_DIM * sizeof(char **));
for (z = 0; z < Z_DIM; z++)
{
Arr3D[z] = malloc(Y_DIM * sizeof(char *));
for (y = 0; y < Y_DIM; y++)
{
Arr3D[z][y] = space + (z*(X_DIM * Y_DIM) + y*X_DIM);
}
}
【问题讨论】:
-
您是否要分配一个连续的数组?还是尝试更改顺序?
-
我正在尝试分配一个连续的数组。当我访问它时,我想访问它,以便循环按以下顺序排列:Z -X -Y。这意味着 Y 的增量最快,所以我希望 Y 值在内存中是最连续的
-
所以基本上你想在 1 个 malloc 语句中分配一个 3D 数组?
-
正确,并且可以用三括号表示法访问它,其中中间括号是内存中“最连续的”
-
imo,这是不可能的(我可能错了)。即使你用一个 malloc 分配一个 3D 数组(我在大学期间做过),Arr3D[x][y] 也将是一个指向数组的指针。所以 Arr3D[0][1][0] 和 Arr3D[0][2][0] 不会是连续的