我想给一个长度为x的数组。x 是用户输入。但问题是 x 必须是 const。
这是我的代码:
int *length = 0;
cin >> (*length);
const int arraylength = const_cast<int>(*length);
int l[arraylength];
您不能在 C++ 中分配具有动态长度的基于堆栈的数组(您可以在 C 中)——长度需要是编译时常量。您需要动态分配数组(或使用std::vector<>
)
int* l = new int[arrayLength];
// use l as you did before
delete[] l; // when you no longer need to access its contents
此外,您声明了一个指针length
,但它被初始化为NULL
,这意味着您不能取消引用它(您cin >> (*length);
将在运行时失败)
注意:由于您使用的是 C++,因此最好使用std::vector<int>
而不是原始数组 - 如果需要,您可以获得动态调整大小和可能的边界检查(使用其at()
成员函数时)的好处,也无需在使用时删除它RAII 习惯用法在其生命周期结束后清理分配的内存(这也提供了面对异常时的内存泄漏保护)。
C++ 不支持 VLA(可变长度数组)。虽然const
,您int
在编译时并不固定。
备择方案:
std::vector<int> l(arraylength);
或者
int* l = new int[arraylength];
//...
delete[] l;