当我发现数组大小必须在声明时给出或在运行时使用 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 中支持可变长度数组?