在以下网站中:
他们讨论了如何反序列化二叉树。我可以成功地实现所描述的方法,但我不知道为什么函数的第一个参数/参数:
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);
}
}
这是对的吗?
答案 0 :(得分:2)
void readBinaryTree(BinaryTree *&p, ifstream &fin)
此处,p
是对指针的引用(内存中指向BinaryTree
的现有指针), NOT 对BinaryTree
的引用本身。如果没有&
运算符,则在调用函数时,将通过值传递指针p
(指针被复制)。
答案 1 :(得分:1)
参数p
是对BinaryTree
指针的引用。该函数使用new
给p
一个值,然后将其传递给任何调用它的代码。
即
readBinsaryTreee(x, ...)
// Now x will point the the binary tree created by the function `readBinaryTree`