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

标签 c++ pointers

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

相关文章:

c++ - 如何从 C++ 中分配的枚举中获取随机值?

c++ - 如何在C++ Builder XE中调试dll?

C++链表不显示String类型变量

c++ - 如何使用 QtConcurrent::run 调用以指针为参数的非类成员函数?

c++ - 在可变模板函数中为每个模板类型调用 void 函数?

c++ - 'const T*' 是 cv 未限定的类型吗?

c - 从另一个函数保存指针地址

c++ - 使用 `std::shared_ptr` 时有效地节省内存/编程

c - 如何根据字符串删除链表中的节点

c - 我只是不明白这个指针的情况