我想展示一个从main方法更新int指针然后使用链表更新相同内容的示例。请解释为什么更新简单的int *工作并向头部添加节点不会。
示例1:
#include <iostream>
void changeValue(int* num);
int main(int argc, const char * argv[]) {
int test = 7;
int* ptr = &test;
std::cout << "Original value of test: "<<*ptr<<std::endl; // Value is 7
// Change Value
changeValue(ptr);
std::cout << "Value of test after update: "<<*ptr<<std::endl; // Value is 11
return 0;
}
void changeValue(int* num){
*num = 11;
}
测试值从7更新为11.我希望如此。
示例2:
#include <iostream>
struct Node{
int data;
Node *next;
};
void addNode(Node * head , int data);
int main(int argc, const char * argv[]) {
Node * listHead = NULL;
addNode(listHead, 34);
addNode(listHead, 67);
return 0;
}
void addNode(Node * head , int data){
Node* newNode = new Node;
newNode->data = data;
newNode->next = NULL;
if(head == NULL){
head = newNode;
}else{
Node* temp = head;
while(true){
if(temp->next == NULL){
temp->next = newNode;
break;
}
temp = temp->next;
}
}
}
执行后,listHead仍为NULL。我读了一篇帖子,解释说当你传递这样的节点时,你仍然在复制,但这对我没有意义。我刚刚创建了一个节点指针。它应该像int指针一样更新,对吧?
另一篇帖子暗示这类事情是一个范围问题,但我没有看清楚。
我已经看到了链接列表示例,其中listHead作为双指针传入,这确实有效,但我想了解发生的事情是否有所不同。
由于