- 締切済み
多次元配列の動的メモリ
1次の配列aの動的メモリは例えば 「double *a; int num = 3; //配列の数 a = new double [3];」 などとすれば確保できることは分かるのですが、 二次元配列など、多次元配列の動的メモリは どのようにすれば確保できるのですか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
> としたとき、これは、double 3個という > 型の配列なので、その個数である、最初の > [3] は省略できる場面がありますが、 > 2番目の [4] は、「型の一部」なので、 > 省略できないということになります。 一部訂正です。 > としたとき、これは、double 4個という ですね。この、「4」は、型の一部になります。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
実は、正式にはC++には、多次元配列 というものは存在しないことになってい ます。 では、たとえば、 double a[3][4]; などと宣言したものは何かといえば、こ れは、 1) double 型の要素4個からなる配列があって 2) それを、3個集めた配列 という、「配列の配列」というべきものに なっています。 こういう訳なので、「多次元配列を直接 動的に確保する」ことはできないことに なっています。 つまり、 double (*a)[4] = new doule[3][4]; というのは、 double [4] (double 型4個要素を持つ配列) というもの自体が、「型」であって、 これを、3個分確保するという書式 になっています。 また、ここにある、 (*a)[4] という見慣れない記述ですが、 これは、「……型4個の配列」というもの へのポインタという意味です。 つまり、 double *a = new double [3]; は、 double へのポインタに、double 3個分の 配列を確保する という意味(これは、よく見かけます) double (*a)[4] = new doule[3][4]; は、 (double 4 個分)へのポインタに、 (double 4 個分)を3個分確保する という書式です。 おまけですが、例えば、配列が関数への 引数になるとき、[] の中は通常省略され ます。 また、 int a[] = {1, 2, 3}; のような初期化も可能です。 しかし、多次元配列(実際には、配列の 配列)は、「一番先頭」の部分しか省略 できません。 これは、上述の通り、 ・最初の [] は、配列要素の個数 ・それ以降は、「型の一部」 だからです。 double a[3][4]; としたとき、これは、double 3個という 型の配列なので、その個数である、最初の [3] は省略できる場面がありますが、 2番目の [4] は、「型の一部」なので、 省略できないということになります。
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
お疲れ様です。 やった事が無いので興味があり、調べてみました。 GOOGLEで[new 多次元配列]で検索し、参照URLのHPを見つけました。 以上
- jacta
- ベストアンサー率26% (845/3158)
double (*a)[4] = new doule[3][4]; のようにします。