You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用动态数组而非普通固定大小数组?

C++动态数组使用疑问解答

动态数组插入新值演示代码

以下代码用于演示如何在动态数组中插入新值:

#include <iostream>

int main()
{
    int* items = new int[5] {1, 2, 3, 4, 5}; // 初始化5个元素

    for (int i = 0; i < 5; i++)
        std::cout << items[i] << std::endl;

    // 插入新元素的步骤:
    // 1. 分配容量更大的新动态数组
    // 2. 把旧数组的元素复制到新数组
    // 3. 释放旧数组空间,把原指针指向新数组
    int* items_temp = new int[6];
    for (int i = 0; i < 5; i++)
       items_temp[i] = items[i];
    items_temp[5] = 42;
    delete[] items;
    items = items_temp;

    for (int i = 0; i < 6; i++)
        std::cout << items[i] << std::endl;

    delete[] items;
}

动态数组对比普通静态数组的核心优势

你提到的用普通数组扩容的思路存在本质限制,两者核心差异如下:

  • 静态数组的长度必须是编译期固定的常量,不能在程序运行过程中根据实际需要的数量动态调整。比如你无法根据用户输入的商品数量、接口返回的列表长度来决定静态数组的大小,只能提前预估一个最大值,很容易出现预估不足溢出、或者预估太大浪费空间的问题。
  • 静态数组分配在栈内存中,栈空间大小非常有限,通常只有几MB到几十MB,要是存储上万、十万级别的数据,直接会触发栈溢出导致程序崩溃。而动态数组分配在堆内存中,堆内存可以用到GB级别,完全可以支撑大量数据的存储需求。
  • 静态数组的生命周期和其所在的作用域严格绑定,比如你在函数内部定义的静态数组,函数执行结束就会被系统自动回收,无法返回给上层调用方使用。而动态数组只要你不主动调用delete[]释放,就会一直存在,可以跨函数、跨模块传递使用。
  • 就算你提前开一个超大的静态数组避免溢出,也会造成严重的内存浪费:比如你预估最多存10万条数据开了对应长度的数组,实际运行大部分场景只用到几十条,剩下的空间全被占用浪费了,动态数组可以按需扩容,内存利用率高很多。

内容的提问来源于stack exchange,提问作者penny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:45:03