私は次の例があるC++にし、本の中で多次元配列を学ぶ:C++の配列の初期化
int (*b)[2] = new int[1][2];
それはこの表記法を使用している理由の代わりに標準
int b[1][2];
の、説明してくださいと一般的に、それらの間に違いはありますか?ありがとう。
私は次の例があるC++にし、本の中で多次元配列を学ぶ:C++の配列の初期化
int (*b)[2] = new int[1][2];
それはこの表記法を使用している理由の代わりに標準
int b[1][2];
の、説明してくださいと一般的に、それらの間に違いはありますか?ありがとう。
のint *のB [2つの]ポインタ
のアレイと
あるINTは(* B)[2] []はサイズ2
優先順位の配列を指すポインタでありますよりも高い *。これにより
int (*b)[2]
その列が静的に割り当てられている間、それは、ポインタ2の配列を指しているように行が拡張可能である(またはそれらが動的である)ことを意味します。
int b[1][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
は、 を他のものに向け直すことはできません。
ヒープとスタック... – donkopotamus
最初のものは動的メモリ割り当てを使用し、 'b'が演算子' delete [] 'で明示的に破棄されるまで存在し続けます。 2番目は、どこに定義されているかに応じて、自動保存期間(格納スコープが完了したときに終了することを意味する)または静的格納期間(プログラムが終了するまで存在することを意味します)のいずれかです。 – Peter
おそらく 'std :: vector'と' std :: array'について読むと役に立ちます –