数组名大小为啥必须是常量

数组名大小为什么必须是常量
有个地方我有点疑惑,局部变量的空间分配是在运行时分配的, 
int a;
scanf("%d",&a)
int array[a],按理说执行到array[a]这句时a的值已经知道了,为什么还错,是不是在进入函数体未执行任何代码的时候该函数的所有局部变量就都分配好还是怎么的,有点小疑惑,求高人指点下啊

------解决方案--------------------
数组在分配空间的时候需要常量来计算,不能确定大小当然不能分配大小了。
------解决方案--------------------
不能这么写的,数组分配空间必须是常量 或者是可以计算的常量 不能是位置的变量
------解决方案--------------------
探讨

数组在分配空间的时候需要常量来计算,不能确定大小当然不能分配大小了。

------解决方案--------------------
C99支持变长数组了
------解决方案--------------------
在堆上就没问题
int *array = new int[a];
------解决方案--------------------
三楼正解!!!
------解决方案--------------------
最初就是这么定义的,要刨根问底,还要看c实现数组的汇编代码
------解决方案--------------------
探讨

引用:

数组在分配空间的时候需要常量来计算,不能确定大小当然不能分配大小了。

正解
int array[a]这是在栈上分配的,大小在编译时就要决定下来

------解决方案--------------------
探讨
数组在分配空间的时候需要常量来计算,不能确定大小当然不能分配大小了。

------解决方案--------------------
探讨
引用:

数组在分配空间的时候需要常量来计算,不能确定大小当然不能分配大小了。

正解
int array[a]这是在栈上分配的,大小在编译时就要决定下来

------解决方案--------------------
反汇编下 数组空间在编译的时候就分配好了
------解决方案--------------------
编译器的问题,主要是为了分配空间....
------解决方案--------------------
为什么地球是圆的?因为地球必须是圆的,不是圆的当然不行了。这种用问题来回答问题的技巧真是不错。
------解决方案--------------------
这个是行业规定!!
------解决方案--------------------
编译器要先编译成二进制,既然不知道你的数组大小,怎么配内存呢,常识问题
------解决方案--------------------
C语言语法规则,楼主不要装牛角尖哦
------解决方案--------------------
1——16楼都是正解
------解决方案--------------------
探讨
不能这么写的,数组分配空间必须是常量 或者是可以计算的常量 不能是位置的变量