概要
動的に 3 次元配列を確保します。
プロトタイプ
void *AllocArray3D(int size3, int size2, int size1, int size0);
戻り値
確保した 3 次元配列へのポインタが返ります。
パラメータ
size3
3 次元配列の左側の要素数
size2
3 次元配列の中央の要素数
size1
3 次元配列の右側の要素数
size0
配列の要素サイズ
解説
AllocArray3D 関数は、3 次元配列を動的に確保します。返されたポインタを使うと [size3][size2][size1] の多次元配列として使うことができます。size0 には、sizeof(float) などデータ型のサイズを指定します。確保した配列は FreeArray3D 関数で解放しなければなりません。この関数の等価コードを以下に示します。
等価コード
void *AllocArray3D(int size3, int size2, int size1, int size0){ void ***adr3 = (void ***)malloc(size3*sizeof(void *)); void **adr2 = (void **)malloc(size3*size2*sizeof(void *)); void *adr1 = malloc(size3*size2*size1*size0); int i, j, width2 = size2*size1*size0, width1 = size1*size0; for(j = 0; j<size3; j++){ void **tmp2 = adr3[j] = adr2+j*size2; void *tmp1 = (char *)adr1+j*width2; for(i = 0; i<size2; i++) tmp2[i] = (char *)tmp1+i*width1; } return adr3; }
プログラム例
/* * このプログラムは array3d に float 型 * 3 次元配列を割り当て、0.0f で初期化します。 */ void main(){ int sx = 64, sy = 48, sz = 32, x, y, z; float ***array3d = (float ***)AllocArray3D(sz, sy, sx, sizeof(float)); for(z = 0; z<sz; z++) for(y = 0; y<sy; y++) for(x = 0; x<sx; x++) array3d[z][y][x] = 0.0f; FreeArray2D(array2d); }