根据c99标准,我们可以编写以下代码,这是完全合法的
int x;
scanf("%d",&x);
int ar[x];
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我可以分配这样的数组,为什么我需要malloc再次分配可变大小的数组?
另外,请您解释一下可变长度数组的分配情况如何?内心深处,是否调用malloc来分配数组或者是什么?
可变长度数组分配(或实际上任何数组声明)是在堆栈上完成的(假设 GCC 编译器)。Malloc 从堆中分配内存。
堆与堆栈相比有两个优点: 1. 堆栈要小得多。您的可变大小数组很有可能导致堆栈溢出。2. 在堆栈上分配的项目在声明它们的函数返回后不会继续存在。