【问题标题】:c++ object array + argument with reference and pointerc ++对象数组+带有引用和指针的参数
【发布时间】: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

标签: c++ arrays function parameters dynamic-memory-allocation


【解决方案1】:

从右到左阅读:

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

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

【讨论】:

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

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

children = new Object[num];

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

new Object[num]

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

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

【讨论】:

    【解决方案3】:

    是:

    指向Object的指针的引用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多