zoukankan      html  css  js  c++  java
  • 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],没变
  • 相关阅读:
    git使用
    silverlight与wcf双向通讯 例子
    Oracle 存储过程
    C# 视频教程
    佩服的技术大牛 “赵劼”
    setTimeout setInterval
    js闭包
    MVC Razor视图引擎控件
    MVC json
    springboot创建多环境profile打包
  • 原文地址:https://www.cnblogs.com/0-lingdu/p/12222076.html
Copyright © 2011-2022 走看看