配列サイズは宣言時に指定するか、実行時にmallocを使用してヒープから割り当てる必要があることがわかったときに本を読んでいました。このプログラムはCで作成しました。
#include<stdio.h>
int main() {
int n, i;
scanf("%d", &n);
int a[n];
for (i=0; i<n; i++) {
scanf("%d", &a[i]);
}
for (i=0; i<n; i++) {
printf("%d ", a[i]);
}
return 0;
}
このコードは正常に機能します。
私の質問は、このコードがどのように正しく機能するかです。実行前に配列サイズを宣言するか、実行時にmalloc()を使用して配列サイズを割り当てる必要があるというのは、Cの基本概念に違反しているのではないでしょうか。では、なぜそれが正しく機能するのでしょうか?
私の質問に対する解決策は、C99でサポートされている可変長配列ですが、コードをいじってステートメントをint a[n]にすると、scanf( "%d、&n);を超えると、動作を停止します。なぜそうなのですか。Cで可変長配列がサポートされている場合はどうでしょうか。