【问题标题】:Arrays with a size determined at run time, is this valid in C++?在运行时确定大小的数组,这在 C++ 中有效吗?
【发布时间】:2025-12-11 23:25:01
【问题描述】:

所以我正在和我的朋友交谈,帮助她编写一段代码,我一直认为数组需要是编译时常量,因为它们在堆栈上。但她说她的朋友是用这个代码做的:

#include <iostream.h>
#include <stdlib.h>
int main()
{
    int value = ' ' ;
    int sum = 0;
    int count = 0;
    cout<<"Please enter the total number of employees" <<endl;;
    cin>> value;
    int numbers[value];
    cout<<"Now enter the employees corresponding salaries" <<endl;;
    for (int k = 0; k < value; k++)
    {
        cin >> numbers[k];
    }
}

他们正在使用 Dev-C++。

这段代码可以工作吗?我想不会。

【问题讨论】:

  • 她将value初始化为' '有什么原因吗?编译器不会关心(它会将' ' 字符转换为其ASCII 值32),但32 似乎是一个奇数的随机数,可以将int 初始化为。
  • 他们不是程序员,只是普通的大学生。我无法告诉你她为什么选择“ ”,\n 就可以了。
  • @jValdron: 0 会很好 int 不是 char ...这就是为什么这对我们来说看起来很奇怪。

标签: c++ arrays


【解决方案1】:

可变长度数组是gccg++ 中的扩展...所以这不适用于每个编译器。

有关gcc 对可变长度数组的支持的更多信息,您可以查看documentation here

【讨论】:

    【解决方案2】:

    我相信 C++ 正式不支持可变长度数组,但某些编译器和/或语言扩展实现了它们。

    如果你想要一个可变长度的数组,我推荐使用 std::vector。 您可以在此处查看其参考:

    http://www.cplusplus.com/reference/stl/vector/

    【讨论】:

      【解决方案3】:
      #include <iostream.h>
      

      ^ 不是标准标题。它曾经存在于标准之前的时代,即 1998 年之前。它不存在于例如现代 Visual C++。

      cin>> value;
      int numbers[value];
      

      在 C++ 标准化一年后,C99 中引入了可变长度数组或 VLA。所以它们不是原始标准 C++ 的一部分,很高兴它们也没有在 C++11 中采用。而不是这样的野兽,使用例如std::vector 来自 vector 标头或其他一些标准库容器。

      g++ 支持可变长度数组作为语言扩展。你最好关闭这样的扩展。例如,

      d:\dev\test> g++ foo.cpp d:\dev\test> g++ -pedantic -std=c++0x -Wall -O foo.cpp foo.cpp:在函数'int main()'中: foo.cpp:11:警告:ISO C++ 禁止变长数组“数字” foo.cpp:7:警告:未使用的变量“总和” foo.cpp:8:警告:未使用的变量“计数” d:\开发\测试> _

      【讨论】:

        【解决方案4】:

        我尝试使用 GCC 4.6 编译它,发现您发布的代码编译成功。我也试过运行它,发现它可以工作,但我认为代码不是很好。

        【讨论】: