C ++了解指针传递和范围

时间:2017-01-20 07:31:58

标签: c++ pointers struct linked-list scoping

我想展示一个从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作为双指针传入,这确实有效,但我想了解发生的事情是否有所不同。

由于

0 个答案:

没有答案