gpt4 book ai didi

c++ - 为什么我的 C++ 指针突然不同了?

转载 作者:行者123 更新时间:2023-11-28 03:11:58 26 4
gpt4 key购买 nike

我正在用 C++ 创建一个小的 AVL 树类,我在这里有点混淆了指针,而且它的行为很奇怪。

在类中,我有一个名为“root”的变量,它是一个指向节点的指针。有一次,我将此对象的指针传递给以下函数:

template <class T> void AVL<T>::RRotate(Node ** node) {
std::cout << this->root << std::endl << *node << std::endl;
*node = (*node)->left;
std::cout << this->root << std::endl << *node;
}

(请注意,“left”是一个包含指向节点的指针的字段)。

现在,第一次打印总是打印出相同的内存位置。

但是,第二次调用将为 this->root 和 *node 打印不同的目录。

这是为什么?当我设置“*node = (*node)->left;”时,它不应该也改变 this->root 吗,因为节点只是指向该指针的指针?

我有点困惑。

感谢任何帮助!

编辑:示例输出如下:

0x902a88

0x902a88

0x902a88

0x902aa8

编辑 2: 打印出 &this->root 和 node 显示它们始终是相同的值,因此看起来指针指向了正确的位置。

最佳答案

如果你想让 node 成为指向 this->root 的指针,你应该调用 RRotate(&root)

或者,更详细:

node = &(this->root);
this->RRotate(node);

很可能,在您的代码中,node 只是没有指向 root 字段。尝试打印 node&root

关于c++ - 为什么我的 C++ 指针突然不同了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177056/

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