gpt4 book ai didi

c - 有没有办法为数组重新分配内存以允许在开头添加其他值?

转载 作者:行者123 更新时间:2023-12-04 04:38:57 24 4
gpt4 key购买 nike

我需要用零填充现有数组的开头。我目前的方法是为数组重新分配额外的内存,将每个值向前移动,然后添加零。

这对于非常大的数组来说非常慢,所以我想知道 C 中是否有一种方法可以为数组的开头重新分配内存?

例如,如果数组的原始大小 n1=100,并且我想添加 npad=10 值,有没有办法重新分配,使 array[i] 现在指向以前存储在 array[i-npad 的值]?

不抱希望,但提前致谢!

最佳答案

您请求的内容不仅不受标准 C 库的支持,而且在理论上是不可能的,除非在初始分配时分配可能需要的空间。例程可能会给您一种错觉,即以 realloc 的方式在开头添加空间。给人一种在末尾添加空间的错觉,但这需要(可能)移动数据,无论您是自己做还是让被调用的例程来做。

为了比较,realloc不保证它会在数组末尾分配更多空间。它可能会尝试在数组的末尾分配更多空间,但它所保证的是,如果空间可用,它将在更大的空间中提供相同的数据。为此,如果它不能扩大现有的分配,它会分配新的空间和 移动数据 .

如果我们试图实现一个在开始时增加分配的例程,我们将在初始分配时面临一个选择:

  • 分配任何可用的空间。在这种情况下,该空间可能就在其他分配的空间之后。
  • 分配空间,在它之前填充未使用的空间。

  • 如果我们选择前者,分配就不能在一开始就扩大。如果我们选择后者,我们就是在浪费空间,必须提前知道需要多少空间。

    关于c - 有没有办法为数组重新分配内存以允许在开头添加其他值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208020/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com