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

为何C++返回自定义类指针数组需用CustomClass**而非CustomClass*?

为什么返回类型是PersonData**而不是PersonData*?

嘿,这个问题其实是C++里数组和指针关系的经典小坑,我来给你讲透背后的逻辑~

首先咱们先拆解你定义的成员变量:

PersonData* numList[10];

这玩意儿不是指向PersonData对象的指针,而是一个包含10个PersonData*类型指针的数组。简单说,数组里的每一个元素都是指向PersonData的指针。

接下来要搞清楚:当你在表达式中使用数组名(比如这里的numList)时,C++会自动把它转换成指向数组第一个元素的指针。那第一个元素的类型是PersonData*,所以指向这个元素的指针类型自然就是PersonData**——这就是指针的指针:第一层指针指向数组里的某个指针元素,第二层指针才真正指向PersonData对象。

那为什么不能用PersonData*呢?
PersonData*是直接指向单个PersonData对象的指针,而你的numList是指针的数组,根本不是对象的数组。如果强行返回PersonData*,编译器会发现类型完全不匹配,自然就报错了。

给你举个更直观的类比:

  • 如果是int intArr[10];,返回它的时候类型是int*(指向int的指针)
  • 如果是int* ptrArr[10];,返回它的时候类型就是int**(指向int指针的指针)
    你的numList就和上面的ptrArr是一个道理~

回到你的代码里,getNumList()要返回numList这个数组,它被隐式转换成PersonData**类型,所以函数的返回类型必须写成PersonData**才能匹配,不然编译器肯定会拦着你。

另外提一句:这种直接返回私有成员指针的写法会破坏类的封装性,外部代码拿到指针后可以直接修改数组里的元素,这在工程里是不太推荐的,但这是另一个话题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:22