メイン関数で動的サイズの配列を宣言したい場合は、次のことができます。
int m;
cin>>m;
int *arr= new int[m];
コンパイラは、外部シンボルの場合を除き、すべてのシンボルのサイズを知る必要があるため、コンパイル中に次のことを行うことはできません。
int m;
cin>>m;
int arr[m];
私の質問は次のとおりです。
上記のコードでコンパイラが arr のサイズを知る必要があるのはなぜですか? シンボルテーブルに定義されていないローカルシンボルです。実行時に、スタックがそれを処理します (m と同じ方法)。それは、コンパイラが定義されているすべてのオブジェクトのサイズに等しい main() (グローバル シンボル) のサイズを確認する必要があるためですか?
関数がある場合:
int func(int m)
関数内で int arr[m] を定義できますか、それともしなければなりませんか
int *a= new int[m]