下記のようにC/C++の配列で多次元配列を作れば連続したメモリ領域となるが、動的に大きさを変えられないし、関数に渡したりするのも大変だ。 int a[N][M]; 一方、ポインタを使った下記の方法だと確保したメモリ領域が不連続となる。 int **a = new int*[N]; for (int i = 0; i < N; i++) a[i] = new int[M]; 動的にメモリ確保して連続したメモリ領域にしたい場合、以下のようにすれば良い。 int **a = new int*[N]; a[0] = new int[N * M]; for (int i = 1; i < N; i++) a[i] = a[0] + i * M; ここで、 a[i][j] と (*a)[i*M+j] は同じ値を示す。 二次元配列、三次元配列を扱った実際のコード(C/C++)を最後に載せておく。 Cバージョン: #include <stdio.h> #include <stdlib.h> /* NX*NYの二次元配列およびNX*NY*NZの三次元配列. */ #define NX 5 #define NY 6 #define NZ 7 int main() { int **x2; int ***x3; int cnt2 = 0; int cnt3 = 0; int i, j, k; /* 二次元配列の作成 */ x2 = (int**)malloc(NX * sizeof(int*)); x2[0] = (int*)malloc(NX * NY * sizeof(int)); for (i = 1; i < NX; i++) x2[i] = x2[0] + i * NY; /* 三次元配列の作成 */ x3 = (int***)malloc(NX * sizeof(int**)); x3[0] = (int**)malloc(NX * NY * sizeof(int*)); x3[0][0] = (int*)malloc(NX * NY * NZ * sizeof(int)); for...