3

我相信声明数组时数组的大小应该是一个常量 int 。但是,我编译了以下代码,并没有出现任何错误。你能解释一下吗?

#include <stdio.h>

void function(int);

int main(void){
  int m = 0;
  scanf("%d", &m);
  function(m);
  return 0;
}

void function(int i){
  int array[i];
}

输入:5 输出:无。但没有错误。

4

2 回答 2

4

从 C99 添加的可变长度数组(或 VLA)是一种自动存储持续时间的数组数据结构,其长度在运行时(而不是在编译时)确定。

VLA 通过将数组放入堆栈来工作。这使得分配和访问非常快,但堆栈通常很小(几 KB),并且当 VLA 溢出堆栈时,它与无限递归无法区分。

于 2013-10-02T07:16:17.747 回答
1

为什么程序要返回错误?你期待什么?检查 C 中的 VLA。

Reference_to_VLA

于 2013-10-02T07:33:27.630 回答