为什么你会想要在堆上有一个数组?我的教授给了我们两个理由:
- 将数组传递给函数,而不是传递一个副本
- 使数组在作用域之外存在
不能通过以下方式解决这两个问题:
- 将指针传递给堆栈上的数组
- 返回数组的值而不是数组本身(即使用复制构造函数)
谁能给我一个例子,说明堆中的数组必须在哪里使用?
最佳答案
堆中的数组用于使函数的作用域更长。仅当您不想稍后在先前的(上层)调用者中使用它时,将指针传递给堆栈上的数组才有效。而且你不能从函数返回一个数组,你可以返回一个指向数组的指针,但是如果它是在栈中分配的,那么函数返回后它会指向一个无效的内存位置。
第一个原因是错误的:数组从不通过复制传递。当你调用一个函数时,数组名总是衰减成指向它第一个元素的指针,正是为了避免复制整个数组。如果你想通过副本传递一个数组,你必须将它嵌入到一个 struct
中并传递一个 struct
。
如果您事先不知道数组的大小,动态数组分配也很有用(尽管在 C99 引入可变长度数组后这不是真的 - 但仍然,可变长度数组分配在堆栈上,所以你会有同样的问题)。
使用堆分配的另一个很好的理由是,对于非常大的数组,您很容易用完堆栈内存。堆通常更大。
关于c - 为什么你会想要在堆上有一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797271/