gpt4 book ai didi

c++指针和指向引用的指针

转载 作者:太空狗 更新时间:2023-10-29 21:19:23 25 4
gpt4 key购买 nike

我正在尝试创建二叉搜索树。我使用递归过程将节点插入树中。代码如下。

void BST :: insertRoot(Node* node, int data)    {
if (node == NULL)
this -> root = new Node(data);
else
insertOthers(node, data);
}
void BST :: insertOthers(Node* node, int data) {
if(node == NULL) {
node = new Node(data);
return;
}
if(data < node->getData())
insertOthers(node->getLeft(), data);
else
insertOthers(node->getRight(), data);
}

在这段代码中,只有一个节点被插入到树中,然后连接就断开了。但是,当我将 Node* 更改为 Node*& 时,它运行良好。我仍然不明白这两者之间有什么区别。谁能用内存映射解释这两者之间的区别?谢谢

最佳答案

如果按值取指针参数:

Node* node

然后修改它:

node = new Node(data);

会改变函数内的局部变量;但不是来电者的论点。这个新值将丢失,树将保持原样。

按引用传递(这是对指针的引用,而不是指向引用的指针):

Node*& node

表示局部参数与调用者的参数引用相同的指针,因此调用者将看到更改为新值。因此,假设其余逻辑是正确的,这将根据需要更新树中的指针以指向新节点。

关于c++指针和指向引用的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27487495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com