用指针创建静态数组?

时间:2019-11-19 05:02:10

标签: c++ arrays

我知道可以使用诸如int array[5];这样的语法在堆栈上创建数组,其中必须在编译时知道大小,并且array是不可修改的l值。

您还可以使用new之类的int* array = new int[5];在堆上动态创建一个数组,在那里可以使用可变长度的大小并调整数组的大小。

但是类似的东西呢?

int* array;
array[2] = 3;
cout << array[2] << endl;

这将在堆栈上创建一个看起来可调整大小的数组,因为我可以继续添加元素。唯一要注意的是大小。

我在一个项目中意外地编写了以上代码,但从未见过使用过。我不确定是否应该使用它,但是我也不知道它有什么不对。

2 个答案:

答案 0 :(得分:2)

写入int *array;不会创建数组,它声明了指向某个随机内存页面的指针,并且如果您尝试取消引用该指针,则程序将收到“ Segmentation fault”信号。并将被关闭。 从不使用,而没有使用现有对象或分配的对象(使用new)的地址或返回有效地址的函数/方法对其进行适当初始化的指针。

答案 1 :(得分:2)

  

但是类似的东西呢?

int* array;
array[2] = 3;
cout << array[2] << endl;
     

这将在堆栈上创建一个看起来可调整大小的数组,因为我可以继续添加元素。唯一要注意的是尺寸。

不。不幸的是,C ++不能那样工作。如果要使用原始指针创建动态数组,则需要使用new分配数组。

这是因为指针仅保存地址。他们实际上并不保证在该地址分配了内存。因此,如果要使用某个地址,则需要在该地址处分配内存。

如果要动态分配内存,则可以使用其他选项,包括使用std::vectorstd::unique_ptrstd::shared_ptr。您可以在this question上找到有关此内容和一些示例的更多信息。

相关问题