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

C++新手求助:如何理解int** outer = new int*[n];语句?

拆解C++语句int** outer = new int*[n];(针对可变大小数组场景)

嘿,作为C++新手第一次碰到这种嵌套指针的动态分配,懵是很正常的!我来结合你提到的可变大小数组问题,一步步给你掰扯明白这条语句~

先搞懂左边的int** outer

outer是一个指向指针的指针,你可以把它想象成一个“文件夹目录”:

  • 第一个*表示它本身是个指针,指向的不是直接的整数,而是另一个指针;
  • 第二个*表示那个被指向的指针,最终指向的是int类型的数据。
    说白了,outer就是用来存一堆“整数数组的首地址”的容器。

再看右边的new int*[n]

这是C++里的动态堆内存分配操作:

  • new关键字负责在堆上申请一块内存空间(堆内存是可以灵活调整大小的,不像栈内存有固定限制);
  • int*[n]表示我们要申请的这块内存,刚好能放下n个int*类型的变量——也就是n个指向整数数组的指针。
    这一步相当于先给你n个空的“文件夹位置”,等之后你再给每个位置放一个不同长度的整数数组(也就是问题里的可变大小子数组)。

结合可变大小数组的实际场景理解

在那个问题里,我们需要处理n个长度不一样的整数数组,这条语句是搭建整个结构的第一步:

  1. 先用new int*[n]申请n个指针的位置,把它的首地址赋值给outer;
  2. 之后你会循环处理每个子数组,比如第i个子数组长度是k,就执行outer[i] = new int[k];,给这个位置分配对应长度的整数数组;
  3. 最后outer就变成了一个“可以装不同长度数组的二维结构”,完美解决可变大小数组的存储需求。

举个接地气的小例子:
假设n=2,先执行int** outer = new int*[2];,这时候我们有了两个空的“指针位置”。然后给第一个位置分配3个整数的空间:outer[0] = new int[3];,给第二个位置分配2个整数的空间:outer[1] = new int[2];。现在outer[0]指向一个长度为3的数组,outer[1]指向长度为2的数组,完全符合问题要求~

小提醒

用new分配的堆内存不会自动释放,记得用完要清理哦!先循环释放每个子数组:delete[] outer[i];,最后再释放外层的指针数组:delete[] outer;,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:57