0

我在 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 反而表明它们总是相同的值,所以看起来指针指向正确的位置。

4

1 回答 1

2

如果您RRotate(&root)node成为指向this->root.

或者,更详细:

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

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

于 2013-08-11T21:59:36.520 回答