对指针的引用如何在C ++中完全起作用,以及何时需要它们(在链表的情况下)

问题描述 投票:0回答:2

我知道指针保存变量的地址。并且引用指向符号表中的相同地址(即,它们分配给的变量的相同地址)。

我的问题是,如何正确引用指针。以及何时需要它们,而不是单独使用指针(而不是使用对指针的引用)。如果您可以向我解释关于单链接列表的指针引用的使用,将对您有所帮助。

我有以下代码,使用函数删除链接列表的头指针:

struct Node
{
    int data;
    Node* next;
};

struct Node* newNode(int data)
{
    Node* temp = new Node;
    temp->data = data;
    temp->next = nullptr;
    return temp;
}

Node* deleteHead(Node* &head)
{
    if (head)
    {
        Node* temp = head;
        head = head->next;
        delete temp;
    }
    return head;
}

int main()
{
    Node* head = newNode(1);
    head->next = newNode(6);
    head->next->next = newNode(4);
    head->next->next->next = newNode(8);

    head = deleteHead(head);
    Node* temp = head;
    while (temp != nullptr)
    {
        cout << temp->data << " " << endl;
        temp = temp->next;
    }
    return 0;
}

deleteHead(Node* &head)函数中,该函数接受参数Node* &head。但是,即使参数为Node* head,代码也可以正常工作。在什么情况下,我们需要在链接列表中传递Node* &而不是Node*

下面是上面的deleteHead(Node* &head)函数,如果我们仅使用Node* head作为参数而不是Node* &head-],则该函数的工作原理相同。

Function that works the same with Node* and Node* &

我知道指针保存变量的地址。并且引用指向符号表中的相同地址(即,它们分配给的变量的相同地址)。我的问题...

c++ pointers pass-by-reference singly-linked-list
2个回答
0
投票

所以,


0
投票

您通过引用传递指针的原因与您通过引用传递非指针的原因相同:要让函数修改其值。


0
投票

引用是与值语义一起使用的“安全指针”(在操作符重载上下文中确实很有用),因此引用的用法与C中的指针的用法非常相似,除了以下几点:

© www.soinside.com 2019 - 2024. All rights reserved.