如何在c++; 我是C++的新手,所以我正在努力解决一个实践问题。 所以我打算把一个int一个数字一个数字地放到linkedlist中,我写了以下内容: ListNode* listtest() { int i = 1234567; ListNode* head = NULL; ListNode** p = &head; while (i != 0) { int a = i % 10; ListNode* tmp = new ListNode(a); if (head == NULL) { head = tmp; } else { (*p)->next = tmp; p = &tmp; } i = i / 10; } return head; }

如何在c++; 我是C++的新手,所以我正在努力解决一个实践问题。 所以我打算把一个int一个数字一个数字地放到linkedlist中,我写了以下内容: ListNode* listtest() { int i = 1234567; ListNode* head = NULL; ListNode** p = &head; while (i != 0) { int a = i % 10; ListNode* tmp = new ListNode(a); if (head == NULL) { head = tmp; } else { (*p)->next = tmp; p = &tmp; } i = i / 10; } return head; },c++,C++,结果是这个将输出一个linkedlist,其中next本身就是。但是,在我将p=&tmp更改为p=&(*p)->下一个之后,它运行得很好。在我看来,这两行都将指针p更改为p之后的下一个节点。结果怎么会如此不同 (还有什么推荐的文章或视频我可以读来学习如何处理链接列表中的指针,因为作为初学者,这很让人困惑。)tmp是for循环中的一个局部变量 (*p)->next是链表节点中的next指针 (*p)->next=tmp将一个设置为另一个的值,但它们仍然是两个完全独立的实体。指向其中一个的指针在逻辑

结果是这个将输出一个linkedlist,其中next本身就是。但是,在我将
p=&tmp
更改为
p=&(*p)->下一个
之后,它运行得很好。在我看来,这两行都将指针
p
更改为
p
之后的下一个节点。结果怎么会如此不同


(还有什么推荐的文章或视频我可以读来学习如何处理链接列表中的指针,因为作为初学者,这很让人困惑。)

tmp
for
循环中的一个局部变量

(*p)->next
是链表节点中的
next
指针

(*p)->next=tmp将一个设置为另一个的值,但它们仍然是两个完全独立的实体。指向其中一个的指针在逻辑上并不等同于指向另一个的指针。在这一点上,你可以把他们想象成同卵双胞胎。他们看起来像。他们说话很像。但将手指指向其中一个并不等同于将手指指向另一个。它们是各自独立的实体。更重要的是:

p=&tmp-将
p
设置为指向
tmp

它会立刻被摧毁。这是循环中的一个局部变量,一旦循环结束,这个变量就会被销毁,即使循环再次迭代


之后尝试访问此对象是未定义的行为,这将导致。除非你喜欢恶魔从你的鼻子里飞出来,否则你不应该这么做。

我仍然不明白为什么
(*p)->next=tmp
仍然是两个独立的实体,所以
tmp
这里应该有一个指向这个节点的指针,并且给另一个指针分配一个指针不应该让它们都指向同一个对象?它们指向同一个对象,好吧,但是
tmp
(*p)->next
本身是两个完全不同的实体;因此
p=&tmp
p=&(*p)->下一步
最终设置
p
指向不同的实体。