函数参数 - 指针或指针的引用?

时间:2011-02-18 16:15:28

标签: c++

void DeleteChildren(BSTNode *node)
{
    // Recurse left down the tree...
    if(node->HasLeftChild()) DeleteChildren(node->GetLeftChild());
    // Recurse right down the tree...
    if(node->HasRightChild()) DeleteChildren(node->GetRightChild());

    // Clean up the data at this node.
    node->ClearData(); // assume deletes internal data

    // Free memory used by the node itself.
    delete node;
}

// Call this from external code.
DeleteChildren(rootNode);

此功能以递归方式删除BST。

我对第一行BSTNode *node提出了一个问题, 我应该将其修改为BSTNode *& node吗?

4 个答案:

答案 0 :(得分:3)

您希望通过引用传递指针的唯一时间是您想要更改指针指向的内容。如果您想删除节点后将节点设置为NULL,则需要传递BSTNode*&

答案 1 :(得分:2)

不,指针是按值传递的,因此当您将指针作为参数传递时,您实际上是在“复制”指针。只有当您希望被调用者修改调用者中的参数时才通过引用传递。

答案 2 :(得分:0)

你不必。您为DeleteChildren函数指定的指针将被删除,因此rootNode也将被删除。

您的参数可以是BSTNode *&类型的参数。如果需要修改存储rootNode的地址。在这种情况下,你没有。

答案 3 :(得分:0)

没有。假设rootNode也是BSTNode*类型,rootNodenode都指向相同的内存位置。