我在 C++ 中创建了一个小型 AVL 树类,我在这里有点混淆了指针,它的行为相当奇怪。
在类中,我有一个名为“root”的变量,它是一个指向 node 的指针。有一次,我将此对象的指针传递给以下函数:
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,因为 node 只是指向该指针的指针吗?
我有点困惑。
任何帮助表示赞赏!
编辑:示例输出如下:
0x902a88
0x902a88
0x902a88
0x902aa8
编辑 2:打印出 &this->root 和 node 反而表明它们总是相同的值,所以看起来指针指向正确的位置。