我正在用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-&gt; root和* node打印一个不同的目录。
这是为什么?当我设置“* node =(* node) - &gt; left;”时,不应该更改this-&gt; root,因为node只是指向该指针的指针吗?
我有点困惑。
感谢任何帮助!
编辑:示例输出如下:
0x902a88
0x902a88
0x902a88
0x902aa8
编辑2:打印输出&amp; this-&gt; root和节点会显示它们始终是相同的值,因此看起来指针指向正确的位置。
答案 0 :(得分:2)
如果您希望RRotate(&root)
成为指向node
的指针,则应致电this->root
。
或者,更详细:
node = &(this->root);
this->RRotate(node);
最有可能的是,您的代码node
中没有指向root
字段。尝试打印node
和&root
。