声明可变长度数组
Declaring Variable length arrays
可能重复:
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;
}
相关文章:
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 为什么从函数返回数组时需要将数组声明为静态数组.(C++)
- 在 c++ 中直接访问的内联数组声明
- 由于 2D 数组声明,C++ 14 中的运行时错误
- 如何将char数组声明为函数参数?或告诉我此代码中还有其他问题?
- 来自函数参数的 C++ 静态数组声明
- C++ 中的动态数组声明
- C++数组声明
- 数组声明中的错误:表达式必须具有常量值
- 程序随数组声明崩溃
- 运行时和编译时的数组声明
- C++数组声明和初始化
- 带有常量表达式的数组声明
- C ,数组声明,模板,链接器错误
- 如何用'n'维数组声明 std::vector?
- 数组声明上的编译器错误
- 这是什么数组声明
- 头文件类中的数组声明
- 节点数组声明
- 在静态数组声明中使用了两次C++常量