2017-01-15 16 views
-1

私は次の例があるC++にし、本の中で多次元配列を学ぶ:C++の配列の初期化

int (*b)[2] = new int[1][2]; 

それはこの表記法を使用している理由の代わりに標準

int b[1][2]; 

の、説明してくださいと一般的に、それらの間に違いはありますか?ありがとう。

+2

ヒープとスタック... – donkopotamus

+1

最初のものは動的メモリ割り当てを使用し、 'b'が演算子' delete [] 'で明示的に破棄されるまで存在し続けます。 2番目は、どこに定義されているかに応じて、自動保存期間(格納スコープが完了したときに終了することを意味する)または静的格納期間(プログラムが終了するまで存在することを意味します)のいずれかです。 – Peter

+1

おそらく 'std :: vector'と' std :: array'について読むと役に立ちます –

答えて

-1

のint *のB [2つの]ポインタ

のアレイと

あるINTは(* B)[2] []はサイズ2

優先順位の配列を指すポインタでありますよりも高い *。これにより

int (*b)[2] 

その列が静的に割り当てられている間、それは、ポインタ2の配列を指しているように行が拡張可能である(またはそれらが動的である)ことを意味します。

int b[1][2] 

動的にはできないメモリを静的に割り当てています。

-2

最初のオプション:

int (*b)[2] = new int[1][2]; 
  • bが配列へのポインタである[2] int型と動的ヒープ内の2次元アレイに割り当てられました。スタック対ヒープについては、thisを参照してください。
  • この場合はbがポインタなので、同じサイズ(つまりint [1][2])の他の2D配列を指すように再割り当てできます。つまり、その配列がヒープスタックにあるかどうかです。

番目のオプション:

int b[1][2]; 
  • bは(単一の列があるようにメモリには、1次元配列と同じに見えるが)2次元アレイです。コメントで述べたように、bはスタック/自動変数です。
  • またbは、 を他のものに向け直すことはできません。
+0

最初は "2D配列に初期化"しません。 2つの要素を持つ1つの配列の配列を動的に割り当てます。 – Peter

+0

@Peterあなたの専門用語は正確です – artm