将内存分配给3D阵列

时间:2012-10-21 13:47:23

标签: c pointers

我知道如何将内存分配给二维数组但是如果ptr定义为int *ptr[][100];

然后我如何为ptr分配内存?

2 个答案:

答案 0 :(得分:2)

引自C标准第6.2.5节:

  

未知大小的数组类型是不完整类型。它完成了,   对于该类型的标识符,通过在稍后指定大小   声明(内部或外部联系)。

因此,要使用int *ptr[][100];,您必须链接其定义。如果指定该长度,那么您有一个指向int的2D数组。此时,您必须为3D阵列分配足够大的内存块,并在2D阵列中正确分配每个int *

更直接的方法可能如下:

int nx = 100;
int ny = 200;
int nz = 300;

int (*parray)[ny][nz] = malloc(nx*ny*nz*sizeof(int));

最后一行分配一个指向int数组数组的指针,可以像3D数组一样有效地使用它。例如:

for(int ii = 0; ii < nx; ii++)
  for (int jj = 0; jj < ny; jj++)
    for (int kk = 0; kk < nz; kk++)
      parray[ii][jj][kk] = ii*ny*nz + jj*nz + kk;

this question的已接受答案给出了对指向数组类型的指针使用的非常精确和精确的概述。

答案 1 :(得分:1)

使用malloc并指定3D阵列所需的字节数。

int *array3d = (int *)malloc(x * y * z * sizeof(int));

其中x,y和z是3d数组的尺寸。

您当然也可以使用其他类型的数组元素(float,chars,structs),只需确保使用sizeof获得正确的大小。