我知道可以使用诸如int array[5];
这样的语法在堆栈上创建数组,其中必须在编译时知道大小,并且array
是不可修改的l值。
您还可以使用new
之类的int* array = new int[5];
在堆上动态创建一个数组,在那里可以使用可变长度的大小并调整数组的大小。
但是类似的东西呢?
int* array;
array[2] = 3;
cout << array[2] << endl;
这将在堆栈上创建一个看起来可调整大小的数组,因为我可以继续添加元素。唯一要注意的是大小。
我在一个项目中意外地编写了以上代码,但从未见过使用过。我不确定是否应该使用它,但是我也不知道它有什么不对。
答案 0 :(得分:2)
写入int *array;
不会不创建数组,它声明了指向某个随机内存页面的指针,并且如果您尝试取消引用该指针,则程序将收到“ Segmentation fault”信号。并将被关闭。 从不使用,而没有使用现有对象或分配的对象(使用new
)的地址或返回有效地址的函数/方法对其进行适当初始化的指针。
答案 1 :(得分:2)
但是类似的东西呢?
int* array; array[2] = 3; cout << array[2] << endl;
这将在堆栈上创建一个看起来可调整大小的数组,因为我可以继续添加元素。唯一要注意的是尺寸。
不。不幸的是,C ++不能那样工作。如果要使用原始指针创建动态数组,则需要使用new
分配数组。
这是因为指针仅保存地址。他们实际上并不保证在该地址分配了内存。因此,如果要使用某个地址,则需要在该地址处分配内存。
如果要动态分配内存,则可以使用其他选项,包括使用std::vector
或std::unique_ptr
或std::shared_ptr
。您可以在this question上找到有关此内容和一些示例的更多信息。