-2

最近、実行時に配列の次元が指定されている場合、そのようなプログラムは解釈できますが、コンパイルできないことをどこかで読みました。

この次の C++ コードのように

int m;
cin >> m;
int a[m];

Turbo C++ を使用してコンパイルしましたが、配列宣言に定数式が必要であるというエラーが表示されます。(予想)

しかしJavaの場合

int m;
Scanner input = new Scanner(System.in);
m = input.nextInt();
int[] a = new int[m];

エラーは発生しません。(コンパイルされていないと解釈されるためだと思います)
しかし、なぜこの違いがあるのですか?

4

1 に答える 1

2

まず、C++ と Java はどちらもコンパイル済み言語です。また、C++ は Java で行ったこともサポートしています (動的割り当て):

int m;
cin >> m;
int *a = new int[m];

C++ コードの問題は、配列がコンパイル時に決定される一定のサイズを持つ必要があることです。

しかし、あなたの言葉:

配列の次元は実行時に与えられ、そのようなプログラムは解釈できますが、コンパイルすることはできません。

コンパイル言語である C は可変長配列をサポートしています。

于 2013-08-12T14:53:13.110 に答える