声明可变长度数组

时间:2013-01-02 16:13:34

标签: c++ visual-c++

  

可能重复:
  Variable length arrays in 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':未知大小

3 个答案:

答案 0 :(得分:14)

  

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

C ++已经具备此功能。它被称为std::vector,位于标题<vector>中。

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

答案 1 :(得分:2)

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

double *p = new double[n];

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

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

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

delete [] p;

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

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

答案 2 :(得分:1)

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

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

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;

}