当我们有常规数组时,为什么我们需要指向数组的指针?
当我们已经有了用于数组数据的简单数组时,指针数组还需要什么?我们已经可以使用数组来存储数据;为什么我们要使用指向数组的指针?
int array[100];
int *ptr = new int[100]
回答
使用动态分配的数组而不是局部变量的数组有几个原因。
- 空间限制。如果将数组声明为局部变量,它通常存储在称为堆栈的内存区域中。堆栈的大小和空间有限,通常在几十兆字节的数量级,如果超过这个空间,您的程序就会崩溃。如果要处理大型数据集(例如数百兆字节),则需要使用动态分配。(要查看这一点,请尝试创建一个包含 100,000,000 个整数的数组作为局部变量,并将它们全部设置为其索引。)
- 空间效率。当您知道需要多少空间时,动态分配允许您在运行时调整数组的大小。但是,局部变量数组必须具有固定大小。如果该大小太小,则无法存储所需的所有数据。如果它太大,则内存使用效率低下。
- 数组生命周期。一旦在退出时声明的块,局部变量就不再存在。如果您使用本地数组,则数组内容在它们声明的函数完成运行后立即停止存在。动态分配的对象在被明确清除之前一直存在。