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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对指针的引用如何在C ++中完全起作用,以及何时需要它们(在链表的情况下)相关的知识,希望对你有一定的参考价值。

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

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

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

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中的指针的用法非常相似,除了以下几点:

以上是关于对指针的引用如何在C ++中完全起作用,以及何时需要它们(在链表的情况下)的主要内容,如果未能解决你的问题,请参考以下文章

C语言中取地址跟C++中的引用是一个意思吗?

量化如何以及何时在 TFLite 图中起作用?

c 中的引用类型在delphi中如何使用

C语言面试中的问题-指针和引用的使用场景?

浅比较如何在反应中起作用

这个回调如何对 cakePHP 组件起作用?