【发布时间】:2019-11-19 05:02:10
【问题描述】:
我知道可以使用 int array[5]; 等语法在堆栈上创建数组,其中大小必须在编译时知道,array 是不可修改的左值。
您还可以使用new 在堆上动态创建一个数组,例如int* array = new int[5];,其中可以具有可变长度的大小并调整数组的大小。
但是像这样的东西呢:
int* array;
array[2] = 3;
cout << array[2] << endl;
这会在堆栈上创建一个看起来可以调整大小的数组,因为我可以继续添加元素。唯一应该跟踪的另一件事是大小。
我在一个项目中不小心写了上面的代码,我从来没有见过它使用过。我不确定是否应该使用它,但我也不确定它有什么不正确的地方。
【问题讨论】:
-
这是未定义的行为,因为
array是一个未初始化的指针。不要那样做。 -
这会在堆栈上创建一个数组“ - 不。这不是这段代码所做的。这段代码调用 undefined behavior 正是因为它 没有做你说的。