当我们有常规数组时,为啥我们需要指向数组的指针?
Posted
技术标签:
【中文标题】当我们有常规数组时,为啥我们需要指向数组的指针?【英文标题】:Why do we need pointers to arrays when we have regular arrays?当我们有常规数组时,为什么我们需要指向数组的指针? 【发布时间】:2021-08-05 10:44:35 【问题描述】:当我们已经有了简单的数组来存储数组数据时,还需要指针数组吗?我们已经可以使用数组来存储数据了;为什么我们要使用指向数组的指针?
int array[100];
int *ptr = new int[100]
【问题讨论】:
一些编程任务使用指针更容易执行,而其他任务,例如动态内存分配,则无法使用指针执行。 数组本质上是静态的,这意味着一旦声明了数组的大小,就不能根据用户的要求调整它的大小。而指针本质上是动态的,这意味着分配的内存可以在以后的任何时间点调整大小。数组在编译时分配,指针在运行时分配 您是否在质疑我们为什么需要指针或为什么需要动态内存分配? 你的堆栈有多大?你的堆有多大? 【参考方案1】:使用动态分配的数组而不是局部变量的数组有几个原因。
-
空间限制。如果将数组声明为局部变量,它通常存储在称为堆栈的内存区域中。堆栈的大小和空间有限,通常为数十兆字节,如果超过此空间,您的程序将崩溃。如果要处理大型数据集(例如数百兆字节),则需要使用动态分配。 (要看到这一点,请尝试创建一个包含 100,000,000 个整数的数组作为局部变量,并将它们全部设置为它们的索引。)
空间效率。当您知道需要多少空间时,动态分配允许您在运行时调整数组的大小。但是,局部变量数组必须具有固定大小。如果该大小太小,则无法存储所需的所有数据。如果它太大,就会导致内存使用效率低下。
数组生命周期。局部变量在其声明的块退出后立即不复存在。如果你使用本地数组,一旦声明它们的函数完成运行,数组内容就会不复存在。动态分配的对象在被明确清除之前一直存在。
【讨论】:
【参考方案2】:空间限制。这是数组中详细指针的主要原因。这样我们只包含在数组中的变量和值将附加到该特定索引,这样就不会出现空间复杂度
【讨论】:
以上是关于当我们有常规数组时,为啥我们需要指向数组的指针?的主要内容,如果未能解决你的问题,请参考以下文章