3

可能重复:
C++ 中的可变长度数组?

我正在尝试形成一个数组,其大小由用户输入的另一个变量控制。我是 C++ 编码的初学者,我正在使用 Visual Studio 2008 专业编译器。这是编译器显示错误的代码:

double kplus2(double a, double ks, double kr)
{
    int n = (ks-1)*100000;
    double x[n];

错误是

错误 2 错误 C2057:预期的常量表达式
错误 3 错误 C2466:无法分配常量大小的数组 0
错误 4 错误 C2133:'x':未知大小

4

3 回答 3

14

我正在尝试形成一个数组,其大小由用户输入的另一个变量控制。

C++ 已经具有此功能。它被调用std::vector并存在于 header 中<vector>

double kplus2(double a, double ks, double kr)
{
    int n = (ks-1)*100000;
    std::vector<double> x(n);
于 2013-01-02T16:22:17.020 回答
2

您需要动态分配内存,如下所示:

double *p = new double[n];

您可以像使用数组一样使用它,因为 C++ 中的指针语法很方便:

p[0] = 3.14;
p[n-1] = 1.14;

完成使用后,您必须使用delete运算符丢弃内存:

delete [] p;

请注意,我们使用运算符的矢量 [] 版本,delete因为我们使用了运算符的矢量版本new

请注意,某些编译器有一个扩展,它允许像您尝试编码的那样动态调整大小的本地数组。gcc 就是这样一种编译器。这还不是语言标准的一部分,尽管有一天它可能是。

于 2013-01-02T16:16:40.023 回答
1

您可以使用矢量。它也可以在运行时调整大小,因此如果您想添加更多数据,您不必担心创建所需大小的新数组并在其中复制当前数据。

您可以使用矢量,这是解决问题的更好方法,因为它的风险较小;

double kplus2(double a, double ks, double kr)
{
  int n = (ks-1)*100000;

  vector<double> x(n);  // you don't have to worry about deallocating it cuz its a container. It can grow in size at run time

  ...

 return 0;

}

但是,您也可以这样做:

double kplus2(double a, double ks, double kr)
{
  int n = (ks-1)*100000;

  double *x=new double[n]; // array of size i

  // you should also deallocate this dynamically allocated array at the end


  .....

  delete []x;

  return 0;

}

于 2013-01-02T16:53:14.883 回答