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++ 书籍的原因。参考!= 内存地址。可能您混淆了引用和地址运算符? 有关*&amp;(以及**)的一些解释请参见this answer。 【参考方案1】:

从右到左阅读:

当您到达 * 时,将其替换为指向的指针。 当您到达 &amp; 时,将其替换为引用 of。

所以children 将是: 指向Object 的指针的引用。

【讨论】:

我喜欢你的答案,但我发布了一个新的,以增加答案的部分。不错!【参考方案2】:

第二个参数:Object* &children Object* 表示 children 是指向 Object 类型的指针。 & 防止从调用作用域接收孩子的副本,让我们直接使用参数变量,所以当你改变孩子时:

children = new Object[num];

在调用范围内改变参数变量,expand函数返回后,你可以访问:

new Object[num]

通过您传递给扩展函数的参数变量。

通过引用传递参数,是从函数接收信息的另一种方式(它也有其他用途)。

【讨论】:

【参考方案3】:

是:

指向Object的指针的引用

原因是因为它动态分配内存,他可能希望对children的这种更改反映在函数的调用者中(可能是main())。

【讨论】:

以上是关于c ++对象数组+带有引用和指针的参数的主要内容,如果未能解决你的问题,请参考以下文章

C++C++自学旅程:对象数组和对象指针

java数组小结

通过指针、强制转换和取消引用加载向量?

C语言中,结构体作为函数参数传递,详解?

第三章 面向对象编程 3.1类型系统

c语言中,定义数组和引用数组时,其数组的下标的数据类型分别允许是啥?