の違いは何ですか:new演算子とポインタを持つ2つの異なる宣言の違い
int* a = new int[w];
int** b= new int*[w];
とまさにこの意味は:int*[w]
とint[w]
は?
の違いは何ですか:new演算子とポインタを持つ2つの異なる宣言の違い
int* a = new int[w];
int** b= new int*[w];
とまさにこの意味は:int*[w]
とint[w]
は?
int* a = new int[w]
この最初の例では、動的にw
整数を割り当てます。
int** b = new int*[w]
第2の例では、w
の整数へのポインタを動的に割り当てます。
2番目は、配列の各要素が整数へのポインタであるため、単純にn-D配列を実装するために使用できます。 – EsmaeelE
最初のケースでは、w
要素を持つint
の配列を動的に作成しています。次に、w
要素を持つint *
の配列を作成します。サイズw
のint *
のアレイ、およびそれぞれのサイズw
のint
の配列:
表記int*[w]
とint[w]
は、上記のタイプです。
int ** b =新しいint * [w]; この場合、intポインタwで2次元行列を作成していませんか? – Alex
@Alex:いいえ。 2D行列を作成していません。 'int'へのポインタの配列を作成しています。それらのポインタのそれぞれを 'int'の配列を指すように初期化すると、2D配列として多かれ少なかれ扱うことができますが、それでも2次元配列(行列)ではありません。 –
@Alex技術的に、いいえ。行列は固定数の行と列を持ちます。ポインタは初期化されていないので、配列ごとにポインタを割り当てる必要があります。これらのサブアレイは、異なるサイズであってもよい。また、ポインタの配列とintの各配列は互いに独立していますが、真の2次元配列は連続しています。 – dbush
'w 'は変数としてではなくconstとして定義する必要があることに注意してください。 – RoiHatam
@RoiHatam:本当ですか?関数の中で、私はそれが本当だとは思わない。可変サイズが許される。 G ++(7.1.0)は、 'g ++ -O3 - と同じようにファイルスコープ(' int w = 6; int * a =新しいint [w]; int ** b =新しいint * [w]; ' g -std = C++ 11 -Wall -Wextra -Werror -pedantic ... '。これは "C++標準で許可されている"と主張するのと同じではありませんが、標準に違反している場合、 '-pedantic'は警告(' -Werror'のためにエラー)を引き起こすはずです。 –
私たちは教習所ではありません。 **特に**は不明ですか? – Olaf