用变量声明一个数组

时间:2013-10-02 07:13:13

标签: c

我相信当你声明它时,数组的大小应该是一个常量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 输出:没什么。但没有错误。

2 个答案:

答案 0 :(得分:4)

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

VLA的工作原理是将数组放入堆栈中。这使得分配和访问速度非常快,但堆栈通常很小(几KB),当VLA溢出堆栈时,它与无限递归无法区分。

答案 1 :(得分:1)

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

Reference_to_VLA