根据定义,数组是一大块连续的内存位置。 我从 Dynamic 了解到的是我们可以在运行时分配内存。 因此,对于动态数组,假设我们在运行时分配了 100 个内存空间。现在我们执行一些其他操作并为其他变量分配一些内存空间。 由于我们创建的数组是动态的,所以我想我们可以添加更多的元素,它会占用更多的内存空间。 但我不明白的是,这将如何连续,因为下一个内存地址是每个占用的,并且根据定义,数组应该是连续的???
最佳答案
您正在混合术语。在 C 和 C++ 中,数组 在技术上是同一类型的连续 元素的序列。当使用术语“动态数组”时,您不是在使用标准规定的术语,而是一个通用的计算机科学术语,它指的是大小可以在运行时更改的类似数组的容器。
在 C++ 中,这些类似数组的容器是通过例如 vector
class 实现的。 , 可用包括 <vector>
标准库头。在其他语言中可能还有其他设施。
C 没有动态数组,但您可以动态分配数组。这里的术语“动态”有不同的含义:它与 management of dynamic memory 有关。 ,这就是你在使用 malloc
时所做的事情和 free
功能。
在 C++ 中,动态数组的实现是在后台管理动态内存,但这是一个与术语无关的实现细节。
同样在 C 中,您可以实现动态数组(例如编写自定义库),但它们的使用不受语言语法的支持,就像在 C++ 中一样。
动态数组(无论是在 C++ 中还是在 C 中)的存储是否连续也是一个实现细节。如果您需要将动态数组(一般含义)实现为 C/C++ 数组(技术术语),您将最终重新分配内存并显式复制元素。标准 C 库提供了 realloc
功能来帮助应对这样的任务。
关于c - C 中的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800763/