Il-*_*ima 17

分配3D阵列有两种不同的方法.您可以将其分配为指向(1D数组指针的1D数组)指针的一维数组.这可以按如下方式完成:

 int dim1, dim2, dim3;
 int i,j,k;
 double *** array = (double ***)malloc(dim1*sizeof(double**));

        for (i = 0; i< dim1; i++) {

         array[i] = (double **) malloc(dim2*sizeof(double *));

          for (j = 0; j < dim2; j++) {

              array[i][j] = (double *)malloc(dim3*sizeof(double));
          }

        }
Run Code Online (Sandbox Code Playgroud)

有时将数组分配为连续的块更合适.您会发现许多现有库可能要求阵列存在于已分配的内存中.这样做的缺点是,如果你的数组非常大,你可能在内存中没有这么大的连续块.

const int dim1, dim2, dim3;  /* Global variables, dimension*/

#define ARR(i,j,k) (array[dim2*dim3*i + dim3*j + k])
double * array = (double *)malloc(dim1*dim2*dim3*sizeof(double));
Run Code Online (Sandbox Code Playgroud)

要访问您的阵列,您只需使用宏:

ARR(1,0,3) = 4;
Run Code Online (Sandbox Code Playgroud)


Dul*_*leb 6

这会奏效

int main()
{

    int ***p,i,j;

    p=(int ***) malloc(MAXX * sizeof(int **));

    for(i=0;i<MAXX;i++)
    {
        p[i]=(int **)malloc(MAXY * sizeof(int *));
        for(j=0;j<MAXY;j++)
            p[i][j]=(int *)malloc(MAXZ * sizeof(int));
    }

    for(k=0;k<MAXZ;k++)
        for(i=0;i<MAXX;i++)
            for(j=0;j<MAXY;j++)
                p[i][j][k]=<something>;
}
Run Code Online (Sandbox Code Playgroud)


Rom*_*nko 2

array = malloc(num_elem * num_elem * num_elem * sizeof(array_elem));
Run Code Online (Sandbox Code Playgroud)

为什么不?:)

  • @AareP,分配内存更简单,但使用起来并不简单。您不能使用正常的 [i][j][k] 语法。 (5认同)