我正在尝试形成一个数组,其大小由用户输入的另一个变量控制。我是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':未知大小
答案 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;
}