外部RAMなんかに書き込んでおいたデータを扱いやすくするために3次元配列の形にしたいことがありました.案外てこずったのでメモしておきます.
3次元として持つための領域を動的に確保しているのでサイズが可変です.
#include <iostream>
using namespace std;
int data[256]; //元となるデータ領域
int main()
{
//データ領域への値の代入
for(int i = 0; i < 256; ++i) {
data[i] = i;
}
//3次元配列の大きさ
char size_z = 3;
char size_y = 4;
char size_x = 5;
//とりあえずポインタに元のデータ領域の先頭アドレスを代入
int* p = data;
//3次元配列arrayへの整形
int*** array = new int**[size_z];
for (int i = 0; i < size_z; ++i) {
array[i] = new int*[size_y];
for (int j = 0; j < size_y; ++j) {
array[i][j] = p + size_x * j;
}
p += size_x * size_y;
}
//確認のため表示
for (int i = 0; i < size_z; ++i) {
for (int j = 0; j < size_y; ++j) {
for (int k = 0; k < size_x; ++k) {
cout << array[i][j][k] << endl;
}
}
}
//メモリの解放
for (int i = 0; i < size_z; i++) {
delete[] array[i];
}
delete[] array;
}
(sizeof int) * (1 + size_z)だけのメモリを消費します.