c - 声明一个带有变量的数组

标签 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 输出:没有。但没有错误。

最佳答案

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

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

关于c - 声明一个带有变量的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19131712/

相关文章:

在 C 中从 unsigned 转换为 signed char

c - C语言中如何对链表进行排序

c - KILL 信号是否立即退出进程?

c - 如何从 C 程序刷新 Linux 中的 CPU 缓存?

c - 为什么即使输入相同,此代码也会打印不同的数字?

c - 使用带有 gcc 的 windns.h 编译代码的链接器错误

c - 交换程序问题,程序崩溃

c - list 文件中的 requestExecutionLevel 和 CopyFile() 函数失败

c - 这个 malloc 不应该工作

c - 如何在 C 中并发处理 100,000 个请求