巨大な配列を使いたいとします。ではやってみましょう。すなおにこんなプログラムを書いてみます。
int main(){ int a[256][256][256]; return 0; }さてどうなりますでしょうか?
WINDOWS2000では
ということになります。こまります。
プログラムの中で使える変数には数の制約があります。
それゆえ、このような場合はメモリーを確保するという操作を明示的に行う必要があります。
256*256*256個のintが入るだけのメモリーを確保するには
new int[256*256*256];
とやります。 この確保したメモリーを使うにはポインタを利用します。
int *a; a=new int[256*256*256];
とやります。すなわちnewはこの確保したメモリーの先頭のアドレスを返しているのです。 さてこうすれば、*(a+30)というように使うことができます。ポインタですから、
a[50*256*256+50*256+50];ともやれて、こちらのほうが配列のように使えるので便利です。
int*** a=new int**[256]; for(int i=0;i<256;i++){ a[i]=new int* [256]; for(int j=0;j<256;j++){ a[i][j]=new int[256]; } }とやればOk.です。a[0][0][0]からa[255][255][255]までつかえます。
使い終わったらメモリーを手放すことができます。
delete a;