我在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