为何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
相关产品推荐
相关产品推荐

