C++ Понимание прохождения указателя и области действия
Я хотел бы показать пример обновления указателя 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;
}
Значение теста обновляется до 11 из 7. Этого я и ожидал.
Пример 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, верно?
В другом посте указывалось, что подобные вещи были проблемой, но я не вижу этого ясно.
Я видел пример Linked List, где listHead передается как двойной указатель, и это работает, но я хотел бы понять, что происходит, что имеет значение.
Спасибо