3

私はここからこの段落を読みました:http ://www.cplusplus.com/doc/tutorial/dynamic/

先ほど行ったように、通常の配列を宣言することと、動的メモリをポインタに割り当てることの違いについて疑問に思われるかもしれません。最も重要な違いは、配列のサイズは一定値でなければならないことです。これにより、プログラムの実行前にプログラムを設計するときに決定したサイズに制限されますが、動的メモリ割り当てでは、サイズとして任意の変数または定数値を使用したプログラムの実行(ランタイム)。

しかし、私のこのコードは問題なく機能します。

int number;
cin>>number;
int myArray[number];

cout<<sizeof(myArray)/sizeof(myArray[0])<<endl;
cout<<sizeof(myArray)<<endl;

これは、アレイがダイナミックメモリに作成されることを意味しますか?または、静的メモリで作成されていますが、実行時にサイズが決定されますか?

4

2 に答える 2

5

投稿したコードは、C++ 標準に従って機能しません。可変長配列は C で一般的であるため、C++ コンパイラの実装者は、この機能を C++ でも利用できるようにすることをお勧めします。C で行われているようにそれを行うのは確かに良い考えではありませんが、C++ に含めるためにいくつかのバリエーションが議論されています。

gcc と clang は上記のコードを受け入れるようです (必要なインクルード、関数などを追加した後)。clang は警告なしにそうします。

于 2012-11-24T21:00:06.157 に答える
5

コメントで指摘したように、ここで詳細を説明します。

標準 C++ では、コンパイル時に配列のサイズを知る必要があります。あなたの例では、そうではありません。variable length array(おそらく)拡張機能を有効にして gcc を使用しているため、コードはコンパイルされます。

警告レベルを正しく設定すると、このコードがコンパイルされなくなります。

于 2012-11-24T21:01:37.420 に答える