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

Ash*_*ban 5 c arrays

我在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;
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*lis 14

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

从某个角度来看,摘要告诉你的是真实的.:-)