声明可变长度数组

Declaring Variable length arrays

本文关键字:数组 声明      更新时间:2023-10-16

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

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

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

错误为

错误2错误C2057:需要常量表达式
错误3错误C2466:无法分配常量大小为0的数组
错误4错误C2133:"x":未知大小的

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

C++已经有了这个功能。它被称为std::vector,并且存在于报头<vector>中。

double kplus2(double a, double ks, double kr)
{
    int n = (ks-1)*100000;
    std::vector<double> x(n);

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

double *p = new double[n];

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

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

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

delete [] p;

注意,我们使用delete算子的vector[]版本,因为我们使用了new算子的vector版本。

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

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

可以使用vector&这是解决问题的更好方法,因为风险较小;

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;

}