[英]Pointers in C++ / Linked List
让我们说在我的链表类中我保留一个指向链表头部的指针......
在我编写此代码时的一个成员函数中...
Node *cur = head;
cur = cur->next;
为什么不改head->next
?
如果我写cur = NULL
; 它会使头变null
吗?
我假设head
是Node *
。 在这种情况下,当你说cur = cur->next
你正在改变cur
点的位置,但是head
将保持指向列表的头部,因为你没有改变它指向的位置。
Cur----------|
|
V next
Head -----> Item 1--------->Item 2
cur = cur->next
产生以下结果:
Cur--------------------------|
|
next V
Head -----> Item 1--------->Item 2
如果你写:
Node *cur = head;
cur = NULL;
然后, cur
将指向任何东西,没有任何事情会发生在head
。
如果你写:
Node *cur = head;
cur = cur->next;
cur = NULL;
同样的事情会发生( cur
将指向什么都没有,并且没有任何事情会发生在head
)除非head
为NULL
,在这种情况下,你将崩溃cur = cur->next;
如果你试图通过cur
指针设置head->next
到NULL
,你可以使用以下命令:
Node *cur = head;
cur->next = NULL;
我可以看到你的困惑来自于指针的本质。 当你说Node *cur = head;
您正在创建一个指向与head
相同的内存地址的Node
指针。 如果你通过cur = NULL
将cur
设置为其他东西,那么你只需要更改cur
指向的内容 ,而不是它指向的值,因此, head
保持不变。
当你使用cur->next = NULL
,你正在修改cur
指向的next
成员。 这也是head
指向的next
成员,因此,变化也反映在head
head->next
。
cur是指针,cur = cur-> next; 只是在其他地方做点什么,为什么要改变头?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.