c ++对象数组+带有引用和指针的参数
Posted
技术标签:
【中文标题】c ++对象数组+带有引用和指针的参数【英文标题】:c++ object array + argument with reference and pointer 【发布时间】:2017-03-17 20:27:11 【问题描述】:我不明白第二个论点。 它到底是什么? 最重要的是,他(程序员)用它来创建一个新的 Object 对象数组,最后是 num(变量)大小。
void expand(const Object &s, Object* &children, int &num)
...
children = new Object[num]; // <----
【问题讨论】:
我建议您阅读good C++ book。显然,它是对指向Object
的指针的引用。有什么不清楚的地方?
它很难看,但您可以使用Clockwise/Spiral Rule 来破译大多数 C 和 C++ 声明。
Algirdas Preidžius:所以该函数将名为 children 的指针的内存地址作为第二个参数,该指针指向 Object 类型?
@DIMITRios 这就是我建议阅读 C++ 书籍的原因。参考!= 内存地址。可能您混淆了引用和地址运算符?
有关*&
(以及**
)的一些解释请参见this answer。
【参考方案1】:
从右到左阅读:
当您到达 *
时,将其替换为指向的指针。
当您到达 &
时,将其替换为引用 of。
所以children
将是:
指向Object
的指针的引用。
【讨论】:
我喜欢你的答案,但我发布了一个新的,以增加答案的部分。不错!【参考方案2】:第二个参数:Object* &children Object* 表示 children 是指向 Object 类型的指针。 & 防止从调用作用域接收孩子的副本,让我们直接使用参数变量,所以当你改变孩子时:
children = new Object[num];
在调用范围内改变参数变量,expand函数返回后,你可以访问:
new Object[num]
通过您传递给扩展函数的参数变量。
通过引用传递参数,是从函数接收信息的另一种方式(它也有其他用途)。
【讨论】:
【参考方案3】:是:
指向
Object
的指针的引用
原因是因为它动态分配内存,他可能希望对children
的这种更改反映在函数的调用者中(可能是main()
)。
【讨论】:
以上是关于c ++对象数组+带有引用和指针的参数的主要内容,如果未能解决你的问题,请参考以下文章