为什么在运行期间c中接受[n]?

8 c arrays declare

为什么我们可以在c中这样做?

int n;
scanf("%d",&n);
int a[n];
Run Code Online (Sandbox Code Playgroud)

我认为数组在加载时间内位于内存中,但似乎上述示例在运行时期间有效.我是否误解了任何事情?你能帮忙吗?

谢谢,

zou*_*oul 9

我在C中没有专家,但是这可能是一个可变长度的数组通过如加入C99由GCC支持,例如.GCC在堆栈上为这样的数组分配内存,以便在从函数返回时自动释放它.


eph*_*ent 7

在C89中找不到可变长度数组,但它是C99中的新功能.


wha*_*cko 6

I thought array is *al*located memory during load time but seems like the above example works during run-time.

是的,普通数组就像<datatype> <Array_Name> [<size>]在C89中存在的加载时间内分配内存一样,也存在于C99中.

但是在代码片段中int a[n];是一个可变长度数组或简称VLA .C99中的VLA定义与任何其他数组一样,只是长度不需要是编译时常量.

有关需要VLA的文章可以在这里找到:http://www.ddj.com/cpp/184401444 :)