C 中的静态数组和动态数组有什么区别?

新手上路,请多包涵

我必须为我的班级做一个作业,它说不要使用静态数组,只使用动态数组。我在书上和网上都看过,但我似乎不明白。

我认为 Static 是在 编译时 创建的,而 Dynamic 是在 运行时 创建的,但我可能将其误认为是内存分配。

你能解释一下C++中静态数组和动态数组的区别吗?

原文由 user69514 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 950
2 个回答

静态数组是在 堆栈 上创建的,并且具有自动存储持续时间:您不需要手动管理内存,但是当它们所在的函数结束时它们会被销毁。它们在 编译时 必须具有固定的大小:

 int foo[10];

使用 operator new[] 创建的数组具有动态存储持续时间并存储在 _堆上_(技术上是“免费存储”)。它们在 运行时 可以有任何大小,但您需要自己分配和释放它们,因为它们不是堆栈帧的一部分:

 int* foo = new int[10];
delete[] foo;

原文由 Michael Mrozek 发布,翻译遵循 CC BY-SA 4.0 许可协议

让我们用一个函数来说明这个问题

如果我们有静态数组,那么调用 function() 将从内存中迭代所有固定分配的组件。不会有追加。

另一方面,如果我们追加动态数组,它将扩展内存。

原文由 Muhammad Aqeel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题