对指针的引用如何在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
-],则该函数的工作原理相同。
我知道指针保存变量的地址。并且引用指向符号表中的相同地址(即,它们分配给的变量的相同地址)。我的问题...
答案
所以,
另一答案
您通过引用传递指针的原因与您通过引用传递非指针的原因相同:要让函数修改其值。
另一答案
引用是与值语义一起使用的“安全指针”(在操作符重载上下文中确实很有用),因此引用的用法与C中的指针的用法非常相似,除了以下几点:
以上是关于对指针的引用如何在C ++中完全起作用,以及何时需要它们(在链表的情况下)的主要内容,如果未能解决你的问题,请参考以下文章