use*_*468 7 c malloc memory-management multidimensional-array
可能的重复:
在C中使用Malloc三维数组?
2D和3D阵列的动态分配/释放
如何使用malloc分配3D数组?
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)
这会奏效
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)
array = malloc(num_elem * num_elem * num_elem * sizeof(array_elem));
Run Code Online (Sandbox Code Playgroud)
为什么不?:)