我在C下面的一段代码:使用指针为C中的3D数组分配内存?
double ***grid
grid = calloc(nx, sizeof(double**))
for (int i = 0; i < nx; ++i) {
grid[i] = calloc(ny,sizeof(double*));
for (int j = 0; j < ny; ++j) {
grid[i][j] = calloc(nz,sizeof(double));
}
}
我不明白的是,为什么我们不能写grid[i]=calloc(ny,sizeof(double**))
?每个网格成员都是“指针指针”是不是真的?我们也不应该有grid[i][j] = calloc(nz,sizeof(double*))
?
当我以当前形式使用grid[i][j][k]
时,代码正常工作,但我对此感到困惑。我是C新手,所以我会很感激所有形式的解释。
编辑:一条线是丢失:grid = calloc(nx, sizeof(double**))
从一个简单的例子开始:'int * p; p = calloc(10,sizeof(int));' – melpomene
@melpomene exellent suggestion,thanks :) – secluded
标题误导:显示的代码分配了一个锯齿状的“3D-阵列”,实际上它是一维“双**,大小为X,X 1D,数组为double *,大小为Y,Y为1D,数组为double,大小为Z。所以这里只有一维数组,即1 + X + Y。一个真正的3D数组可以像这样定义'double array3d [X] [Y] [Z]'。 – alk