当我们已经有了用于数组数据的简单数组时,还需要指针数组吗?我们已经可以使用数组来存储数据;为什么我们要使用指向数组的指针?
int array[100];
int *ptr = new int[100]
最佳答案
使用动态分配的数组而不是作为局部变量的数组有几个原因。
- 空间限制。如果将数组声明为局部变量,它通常存储在称为堆栈的内存区域中。堆栈的大小和空间有限,通常在几十兆字节的数量级,如果超过这个空间,你的程序就会崩溃。如果你想处理大数据集(比如数百兆字节),那么你需要使用动态分配。 (要了解这一点,请尝试创建一个包含 100,000,000 个整数的数组作为局部变量,并将它们全部设置为等于它们的索引。)
- 空间效率。当您知道需要多少空间时,动态分配允许您在运行时调整数组的大小。但是,局部变量数组必须具有固定大小。如果该大小太小,则无法存储所需的所有数据。如果太大,则内存使用效率低下。
- 数组生命周期。一旦在 block 中声明的局部变量退出,它就不再存在。如果您使用本地数组,数组内容在声明它们的函数完成运行后立即消失。动态分配的对象在被显式清理之前一直存在。
关于c++ - 当我们有常规数组时,为什么我们需要指向数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68665101/