【发布时间】:2015-10-16 13:08:00
【问题描述】:
我在 C++ 中创建了一个简单的动态链表实现,它的头节点为 42,之后,如果他/她想要将其他数字添加到列表中,则会提示用户。
#include <iostream>
using namespace std;
struct Node
{
int x;
Node *next;
};
int main(int argc, char** argv)
{
char choice;
Node *start = new Node;
start->next = NULL;
start->x = 42;
Node *traverser = start;
while (1) {
cout << "Add item to the list (Y/N)? ";
cin >> choice;
if (choice == 'Y') {
traverser->next = new Node;
traverser = traverser->next;
traverser->next = NULL;
cout << "New item: ";
cin >> traverser->x;
}
else {
cout << "Linked List:\n";
Node *p;
for (p = start; p != NULL; p = p->next) {
cout << p->x << endl; //QUESTION HERE!
}
cout << "\nProgram dismissed.";
exit(0);
}
}
}
现在问题,如代码块所示,在于指针 *p。我的链表的头部被命名为 start,而遍历并添加项目到链表的指针被命名为 traverser。为什么 *p 仅分配给头部时能够打印列表中的所有内容
p = start
而不是列表的主体。我会明白这适用于打印
cout << "Linked List:\n";
for (traverser = start; traverser != NULL; traverser = traverser->next) {
cout << traverser->x << endl;
}
但是 *p 能够打印整个列表让我很困惑!
请帮忙。
【问题讨论】:
-
“不在列表的正文中”是什么意思?
-
p指向与start相同的东西。因此,无论您可以使用start做什么,您都可以使用p。 -
指针“指向”事物,可以通过赋值改变为指向其他事物。
p从start开始,然后改为指向下一个Node等,直到下一个Node为NULL。 -
@CaptainGiraffe 不是列表的主体,我的意思是指针被初始化为 *p = start,而不是 *p = traverser。我们知道 start 只包含一项 - 42,即列表的头部。而遍历器包含列表的整个主体。
标签: c++ pointers linked-list