【发布时间】:2020-01-25 18:54:15
【问题描述】:
我有以下代码sn-p(关于单链表)-
class Node
{
public:
int data;
Node* next;
};
Node* newNode(int data)
{
Node* temp = new Node;
temp->data = data;
temp->next = nullptr;
return temp;
}
int main()
{
Node* head = newNode(2);
head->next = newNode(4);
Node* p1 = head;
p1 = nullptr;
return 0;
}
这里,head 和 p1 是单独的变量 - 表示单独的内存位置。因此,当我们执行p1=nullptr 时,应该只执行p1,而不是head。而且,当我调试代码时会发生这种情况(如下图所示):
但是,当我执行 p1->next=nullptr 而不是 p1=nullptr 时,head 也会受到影响。如下图所示:
p1 和 head 是不同的内存位置。因此 p1=nullptr 不会影响 head。但是为什么p1->next=nullptr会影响head呢?
p1 指向一个指针串,head 也指向一个指针串(p1->next->next->next... 和 head->next->next->next...)。 p1 与 head 位于同一内存位置。并且 p1->next 和 head->next 也在同一个内存位置(在我们说 p1=head 之后),其他 next 指针也是如此。那么,为什么将 p1 设置为 nullpointer(或任何其他值)不会影响 head。但是,设置 p1->next 到 nullptr,效果头?如果你能用方框图来回答我这里的内存是如何工作的,那将会很有帮助。谢谢!
【问题讨论】:
标签: c++ pointers singly-linked-list