2013-01-10 62 views
2

让我说我的链表中的类我保持一个指向链表头的指针...在C++ /链接列表中的指针

在我写这个代码的成员函数之一..

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

为什么不换头head->next

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

+3

那么,什么是* *变量? (忽略参考参数和所有爵士乐) – 2013-01-10 22:45:57

+0

为什么你不试试看看你会得到什么结果? –

+0

它与'int x = 0; int y = x; y = 1;'。为什么'x'的值在我们赋值给'y'时不会改变? – molbdnilo

回答

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;时,您正在创建一个Node指针,指向与head相同的内存地址。如果通过cur = NULL设置cur到别的东西,那么你只能改变什么cur,什么它指向,因此不值,head被单独留在家中。

当您使用cur->next = NULL相反,你修改的什么curnext成员。这也是head指向的next成员,因此,该变更也反映在head->next中。

+0

cur.next = NULL;这会改变目标吗? –

+0

@MadanLal'head'和'cur'指向同一个事物,任何一个操作都会影响另一个。 –

+0

@MadanLal ...你需要使用' - >',因为'cur'是一个指针,所以它会是'cur-> next = NULL'。 – Foggzie

1

cur是指针,cur = cur-> next;只是让Cur点在别的地方,它为什么要改头换面呢?

7

我假设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