声明具有非常量大小变量的数组

我在C学习我的考试,我正在阅读我从某个网站下载的C摘要。 写道,不允许写入arr[i] ,其中i是变量。 唯一的方法是使用malloc。
但是,我编写了以下代码,它在没有警告的情况下编译,并且在valgrind上没有错误:

 int index = 5; int a4[index]; a4[0] = 1; a4[1] = 2; int index2; scanf("%d",&index2); int a5[index2]; a5[0] = 1; a5[1] = 2; 

那么数组声明背后的真相是什么呢? 谢谢!

C99允许在堆栈上创建可变长度数组 。 您的编译器可能支持此function。 此function在C89中不可用。

从某个角度来看,摘要告诉你的是真实的。 🙂