-1

我想给一个长度为x的数组。x 是用户输入。但问题是 x 必须是 const。

这是我的代码:

int *length = 0;
cin >> (*length);
const int arraylength = const_cast<int>(*length);
int l[arraylength];
4

2 回答 2

6

您不能在 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 习惯用法在其生命周期结束后清理分配的内存(这也提供了面对异常时的内存泄漏保护)。

于 2012-06-22T11:44:24.693 回答
3

C++ 不支持 VLA(可变长度数组)。虽然const,您int在编译时并不固定。

备择方案:

std::vector<int> l(arraylength);

或者

int* l = new int[arraylength];
//...
delete[] l;
于 2012-06-22T11:45:49.307 回答