c - 奇怪的 C 代码 - 动态数组?

标签 c

我有一些从未知来源复制的代码:

 int Len=0;
 printf("Please input the length of vector");
 scanf("%d",&Len);
 float x[Len],y[Len],sig[Len];

现在通常我认为数组不能在运行时用变量初始化。然而,据称这确实可以编译。问题是我又不知道编译器。是否存在合法的 C 变体?我使用的编译器 IAR C 不喜欢它。

我还看到从 1 而不是 0 索引的数组,这表明它最初是从 Pascal 之类的东西翻译过来的。有意见吗?

最佳答案

Now normally I believe that arrays cannot be initialized during runtime with a variable.

在 C99 标准之前就是如此。它在 C++ 中也是非法的(尽管某些编译器,例如 gcc,提供此扩展)。

Is there a C variant where this is legal?

任何 C99 编译器都可以。

I am also seeing arrays indexed from 1 rather than 0

这也可以,只要您可以很好地分配额外的元素,并且不使用索引为零的元素。

注意:由于访问超出数组末尾的元素是未定义的行为,因此无效的程序可能会在测试运行中正常工作并产生所需的结果。如果您怀疑某些数组索引可能相差一,请考虑在内存分析器(例如 valgrind)下运行您的程序,以查看程序是否存在与无效内存访问相关的隐藏错误。

关于c - 奇怪的 C 代码 - 动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103318/

相关文章:

c - 使用 scanf() 输入整数的平方

c - 如何在C上做输入输出文件?

c - 当我想在 C 中设置指向 NULL 的指针时,如何修复不兼容类型错误?

c - 遗产库

c - 在linux中使用open()时如何检测文件被禁止

c - getchar() 函数计算 C 中的字符数

c - 时间处理期间的警告和运行时错误

c - 在 C 中实现一个 shell

c++ - c: 传入变量的wordexp

c++ - 为什么 C++ rand() 似乎只生成相同数量级的数字?