取消引用函数参数中的引用

时间:2014-01-13 18:16:45

标签: c++ pointers recursion reference

在以下网站中:

Link

他们讨论了如何反序列化二叉树。我可以成功地实现所描述的方法,但我不知道为什么函数的第一个参数/参数:

void readBinaryTree(BinaryTree *&p, ifstream &fin)

写为BinaryTree *&p。更具体地说,我不明白为什么我们必须取消引用p的引用。任何澄清将不胜感激。

如果要重新编写该函数,它会是这样吗?

void readBinaryTree(BinaryTree &p, ifstream &fin) {
  int token;
  bool isNumber;
  if (!readNextToken(token, fin, isNumber)) 
    return;
  if (isNumber) {
    p = new BinaryTree(token);
    readBinaryTree(p.left, fin);
    readBinaryTree(p.right, fin);
  }
}

这是对的吗?

2 个答案:

答案 0 :(得分:2)

void readBinaryTree(BinaryTree *&p, ifstream &fin)

此处,p是对指针的引用(内存中指向BinaryTree的现有指针), NOT BinaryTree的引用本身。如果没有&运算符,则在调用函数时,将通过值传递指针p(指针被复制)。

答案 1 :(得分:1)

参数p是对BinaryTree指针的引用。该函数使用newp一个值,然后将其传递给任何调用它的代码。

readBinsaryTreee(x, ...)
// Now x will point the the binary tree created by the function `readBinaryTree`