不明白指针

时间:2016-05-08 17:10:51

标签: c++ pointers

所以我已经设法解决了我的问题,但我无法理解究竟是什么问题。我之前的代码是:

BinaryTree removePrivate(int x, BinaryTree *node)
{
    if ((*node).m_key < x)
        *(*node).m_right = removePrivate(x, (*node).m_right);
    else if ((*node).m_key > x)
        *(*node).m_left = removePrivate(x, (*node).m_left);
    else
        node= NULL ;
    return *node;
}

它编译得很好,但是当它被调用时,事情会变得很糟糕。返回*节点访问冲突;

我已将其更改为:

[*] = *已被添加,[] = *已被删除

BinaryTree [*]removePrivate(int x, BinaryTree *node)
{
    if ((*node).m_key < x)
        [ ](*node).m_right = removePrivate(x, (*node).m_right);
    else if ((*node).m_key > x)
        [ ](*node).m_left = removePrivate(x, (*node).m_left);
    else
        node= NULL ;
    return [ ]node;
}

现在一切正常,但我真的不能100%确定为什么这样更好。

1 个答案:

答案 0 :(得分:2)

当您编写(*node)时,您将取消引用指针node。如果您使用*(*node),就像您最初使用的那样,您将取消引用(*node),这是取消引用的node。因此,您正在取消引用两次,这没有意义,因为node因为指向BinaryTree对象而不是另一个指针。

以更简单的形式:

*node = dereference node
*(*node) = dereference *node = dereference node twice