理解 C 中变长数组的困难

2023-12-01

我正在读一本书,发现数组大小必须在声明时给出,或者在运行时使用 malloc 从堆中分配。我用 C 编写了这个程序:

#include<stdio.h>

int main() {
  int n, i;
  scanf("%d", &n);
  int a[n];
  for (i=0; i<n; i++) {
    scanf("%d", &a[i]);
  }
  for (i=0; i<n; i++) {
    printf("%d ", a[i]);
  }
  return 0;
}

这段代码工作正常。

我的问题是这段代码如何正确工作。这是否违反了 C 的基本概念,数组大小必须在运行时之前声明或在运行时使用 malloc() 分配它。我没有做这两件事中的任何一个,那为什么它能正常工作呢?

我的问题的解决方案是 C99 支持的可变长度数组,但如果我使用我的代码并将语句放入 int a[n];上面的 scanf("%d,&n); 然后它停止工作为什么会这样。如果 C 中支持可变长度数组?


C99标准支持变长数组。这些数组的长度在运行时确定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

理解 C 中变长数组的困难 的相关文章

随机推荐