繁体   English   中英

C ++ /链表中的指针

[英]Pointers in C++ / Linked List

让我们说在我的链表类中我保留一个指向链表头部的指针......

在我编写此代码时的一个成员函数中...

Node *cur = head;
cur = cur->next;

为什么不改head->next

如果我写cur = NULL ; 它会使头变null吗?

我假设headNode * 在这种情况下,当你说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 )除非headNULL ,在这种情况下,你将崩溃cur = cur->next;

如果你试图通过cur指针设置head->nextNULL ,你可以使用以下命令:

Node *cur = head;
cur->next = NULL;

我可以看到你的困惑来自于指针的本质。 当你说Node *cur = head; 您正在创建一个指向与head相同的内存地址的Node指针。 如果你通过cur = NULLcur设置为其他东西,那么你只需要更改cur指向的内容 ,而不是它指向的值,因此, head保持不变。

当你使用cur->next = NULL ,你正在修改cur指向next成员。 这也是head指向的next成员,因此,变化也反映在head head->next

cur是指针,cur = cur-> next; 只是在其他地方做点什么,为什么要改变头?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM