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 передается как двойной указатель, и это работает, но я хотел бы понять, что происходит, что имеет значение.

Спасибо

0 ответов

Другие вопросы по тегам