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

C++20中如何动态分配指向返回数组指针的函数的指针数组

动态分配函数指针数组的正确方式

首先明确目标:你需要动态分配一个包含3个元素的数组,每个元素是指向funcArrayReturn的函数指针。原类型声明int (*(*(*funcPtr2)[3])())[6]可读性极低,推荐先通过类型别名简化后再分配,既清晰又不易出错。

方法1:用类型别名简化(推荐)

先拆解复杂类型,定义多层别名:

// 指向int[6]数组的指针类型
using Int6ArrayPtr = int (*)[6];
// 返回Int6ArrayPtr的函数类型
using ArrayReturningFunc = Int6ArrayPtr();
// 指向上述函数的指针类型
using FuncPtr = ArrayReturningFunc*;

接着动态分配包含3个FuncPtr元素的数组:

// 分配数组,元素默认初始化为nullptr(C++11及以上支持)
FuncPtr* funcPtrArray = new FuncPtr[3]{};
// 给数组元素赋值(指向目标函数)
funcPtrArray[0] = &funcArrayReturn;
funcPtrArray[1] = &funcArrayReturn;
funcPtrArray[2] = &funcArrayReturn;

方法2:直接使用复杂类型分配

如果一定要贴合你给出的原始类型,对应的分配语句如下:

// 直接分配符合目标类型的数组
int (*(*funcPtr2)[3])())[6] = new int (*(*[3])())[6]{};
// 给数组元素赋值示例
(*funcPtr2)[0] = &funcArrayReturn;

额外注意

  • 你实现的funcArrayReturn中,new int[1][6]{25}会将数组第一个元素初始化为25,其余元素值为0(C++值初始化规则),使用完返回的数组指针后记得调用delete[]释放内存,避免泄漏。
  • 动态分配的函数指针数组使用完毕后,也需要用delete[]释放:delete[] funcPtrArray;或delete[] funcPtr2;。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:38:10