new演算子による2次元配列の動的メモリ確保は少しクセがあります。
int (*ip)[3] = new int[2][3]; // 2次元配列確保
ip[0][0] = 1;
ip[0][1] = 2;
ip[0][2] = 3;
ip[1][0] = 10;
ip[1][1] = 20;
ip[1][2] = 30;
for (int x = 0; x <= 1; x++) {
for (int y = 0; y <= 2; y++) {
printf(" %d", ip[x][y]);
}
printf("\n");
}
delete[] ip;
1 2 3
10 20 30
int (*ip)[3] = new int[2][3];
確保したい領域は、そのまま指定できますが、
受け取りポインタの書き方に注意です。
もし、new int[5][10]; のような場合、
受け取りポインタは int (*ip)[10] と書きます。
各要素へのアクセスは、
通常の2次元配列と同じように[]を2つ指定すればOKです。
メモリを解放するときは、
delete[] ip; のように記述します。
これでnewを使った2次元配列の
動的メモリ確保ができるようになりました。