c++ - 当我们有常规数组时,为什么我们需要指向数组的指针?

标签 c++ arrays pointers

当我们已经有了用于数组数据的简单数组时,还需要指针数组吗?我们已经可以使用数组来存储数据;为什么我们要使用指向数组的指针?

int array[100];
int *ptr = new int[100]

最佳答案

使用动态分配的数组而不是作为局部变量的数组有几个原因。

  1. 空间限制。如果将数组声明为局部变量,它通常存储在称为堆栈的内存区域中。堆栈的大小和空间有限,通常在几十兆字节的数量级,如果超过这个空间,你的程序就会崩溃。如果你想处理大数据集(比如数百兆字节),那么你需要使用动态分配。 (要了解这一点,请尝试创建一个包含 100,000,000 个整数的数组作为局部变量,并将它们全部设置为等于它们的索引。)
  2. 空间效率。当您知道需要多少空间时,动态分配允许您在运行时调整数组的大小。但是,局部变量数组必须具有固定大小。如果该大小太小,则无法存储所需的所有数据。如果太大,则内存使用效率低下。
  3. 数组生命周期。一旦在 block 中声明的局部变量退出,它就不再存在。如果您使用本地数组,数组内容在声明它们的函数完成运行后立即消失。动态分配的对象在被显式清理之前一直存在。

关于c++ - 当我们有常规数组时,为什么我们需要指向数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68665101/

相关文章:

c++ - 对耦合的两个链表运行归并排序

c++ - 如何在 C++ 中创建高效的多线程任务调度程序?

javascript - 将 mongo db 查询减少为纯数组

python - 在 numpy 复合数据集中填充值很慢;为什么?

c - 使用指针知道数组的大小

c++ - 这个 GetDefaultAudioEndpoint 程序有什么问题?

c++ - 传递常量引用...它是否像最重要的常量一样工作?

java - 从数组打印的 For 循环

c - 如何复制指针以指向同一对象

c++ - 使用指针转换来存储/转换值 : Am I breaking the strict aliasing rule?