指针的价值没有变化

时间:2015-05-25 19:23:16

标签: c++ pointers data-structures linked-list

class node{
    public:    node* next;
               int data;
};
void insert_node(node* head, int val){
    node* n = new node();
    n->next = NULL;
    n->data = val;
    cout << n->data << endl;
    if (head == NULL){   //point .1.
        head = n;        //point .2.
        cout<<"checkpoint 1 reached"<<endl;
    }
    else{
        node* p = head;
        while (p->next !=NULL)
            p= p->next ;
        p->next = n;
        head->next = n;
    }
    return ;
}
int main(){
    node* head = NULL;
    insert_node(head, 3);
    insert_node(head, 4);
    insert_node(head, 5);
    insert_node(head, 6);
    insert_node(head, 7);
    insert_node(head, 8);
    insert_node(head, 9);
    insert_node(head, 0);
}
`

在上面提到的基本链表代码中,每次调用insert_node函数时,它都会到达点.1。,这意味着head总是有/指向NULL,这的确意味着head不是正在更新 - 但我正在点.2。更新它。提前致谢。 :)

1 个答案:

答案 0 :(得分:5)

指针是一个变量,就像任何其他变量一样,因此可以通过值,引用或指针传递它。您通过值传递

void insert_node(node* head, int val)

如果您想更改它,请通过引用传递

void insert_node(node* & head, int val)

或指向它的指针

void insert_node(node** head, int val)

通过引用传递可能最容易,因为它不涉及任何代码更改。您还可以使用typedef node* NODEPTR;作为类型别名,然后事情变得更加透明,

void insert_node(NODEPTR head, int val) // a bit more clear that head is passed by value