从函数返回值获取指针的地址

时间:2014-12-09 10:08:22

标签: c++ pointers

我们说我有不平衡的二叉树数据结构。在init()之后,我将变量Node * root设置为NULL 我的一种方法是尝试在树中插入节点

bool insertNode(Node ** currentNode, const string & key, int val)
{
    Node* newNode;

    if (*currentNode == NULL)
    {
        newNode = newNode(key,val);
        *currentNode = newNode;
        if(root==NULL) root = newNode;
        return true;
    } 
    if (key<*currentNode->getKey())
    {
        insertNode((Node **)&(*currentNode)->getLeft(), key, val); //error
    }
    if (key>*currentNode->getKey())
    {
        insertNode((Node **)&(*currentNode)->getRight(), key, val); //error
    }
    return false;
}

Node* getRoot() { return root; }

它被称为

insertNode((Node **)&(tree.getRoot())); //error

不幸的编译器给了我错误

error: lvalue required as unary ‘&’ operand|

如果我像这样调用带变量Node* node的fce insertNode

Node* node = tree.getRoot(); 
insertNode((Node **)&node); //no error

没有错误。

你能解释一下为什么吗?

编辑: 在ravi的回答之后,我意识到我只更改了地址副本。

要解决这个问题我改变了fce

Node** getRoot() { return  &root; }

Node

的成员方法
Node** getLeft()
{
  return &m_left;
}

Node** getRight()
{
    return &m_right;
}

1 个答案:

答案 0 :(得分:1)

insertNode((Node **)&(tree.getRoot()));

这是因为你不能使用返回内置类型的函数的返回值作为l值。