c++踩坑大法好 赋值和指针的区别

1,先说结论:

两个指针指向同一个结构,一个改了结构,另一个也会改掉。

两个指针指向同一个结构,修改了其中一个的指向,并且改了其中的内容,另一个不为所动。

2,看例子

main.cpp

#include <iostream>
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
//c++链表声明

void checkListNode(ListNode* xc) {
    while (xc != NULL) {
        printf("%d
",xc->val);
        xc = xc->next;
    }
}
//查看链表的函数定义和声明放在一块了

int main(int argc, char *argv[]){
    ListNode* node1 =new ListNode(1);
    ListNode* node2 =new ListNode(2);
    ListNode* node3 =new ListNode(3);
    node1->next = node2;
    node2->next = node3;
    //链表定义:[1,2,3]
    ListNode* temp1 = node1;
    ListNode* temp2 = temp1;

    //下文代码带入就可以
    return 0;
}

情况1,改一个指针指向的内容,另一个也变了

//这个时候temp1和temp2是指向同一个链表的指针,单修改temp1或者temp2都会引起另一个的改动,就像这样
temp1->next = node3;
checkListNode(temp2);//得到[1,3]变了

情况2,指针一但经过重新赋值,指向的就不再是之前的内容了,所以这时候改一个,另一个是不会有变化的。

//但是如果你对指针进行重新赋值,修改了指向,它指向的就不再是同一个链表,单改一个不会造成另一个的改动
temp1 = node3;
checkListNode(temp2);//得到[1,2,3],没变
原文地址:https://www.cnblogs.com/0-lingdu/p/12222076.html