我正在用 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/