zoukankan      html  css  js  c++  java
  • 传值与传引用

    1、在C++中,可认为只有传值和传引用。传指针本质上就是传值。将a指针传给b指针,两个指针是两个对象(而引用是别名),它们的值相等,即a、b指向同一块内存。这个时候,要千万注意:修改指针使它指向另一块内存与修改指针指向的内容之间的区别。以b为例说明,修改b使它指向另一块内存,a不变,还是指向原来的内存,内容也不变。修改b指向的内容,由于a,b指向同一块内存,也就是修改a指向的内容,a内容发生变化。

    2、复制指针是浅拷贝,两个指针地址相同,共享同一块内存。如何进行深拷贝?

      把原指针指向的内容做一个整体拷贝,新指针指向拷贝的内容,这就是深拷贝。注意:深拷贝后,每个指针指向不同的内存,内容相等,但是指针值不相等。

    3、考虑,下面的需求:指针a传给指针b,我们通过修改b指向的内容,也就相当于修改a指向的内容。那么考虑。a传给c,我想通过修改c,来修改a的指向,该怎么办呢?

      a、创建一个指针a的引用,相当于给指针取个别名,这种情况下,修改别名的指向,就是修改a的指向。注意:指针的引用的写法,考虑int的引用为int &a;那么int指针的引用就是int* &pi。特别注意:没有引用的指针的概念。也就是说,没有int& *pi;指向引用的指针就是指向原对象的指针,即int *pi。很好理解:引用是别名,指向int& 的指针就是,指向int的指针。因此,没有指向引用的指针的概念。

      b、增加一个间接层,使用指针的指针。

    4、引用本身也是用指针实现的,可认为引用对指针进行了封装。行为上像个对象,可认为是对象的别名,传递时避免了对象的整体拷贝。

     1 //int a =3;
     2 //int b =7;
     3 //int* p1 = &a;
     4 //int* p2 = p1;
     5 //*p2 = 5; // 修改p2指向的内容,p1的内容也发生变化
     6 //p2 = &b; // 修改p2的指向,p2的内容变化,p1的指向不变,内容不变。
     7 
     8 
     9 //int a =3;
    10 //int b =7;
    11 //int* p1 = &a;
    12 //int* &p2 = p1;
    13 //p2 = &b; // 修改别名的指向,就是修改原指针的指向
    14 //*p2 = 8; // 修改别名指向的内容,就是修改原指针指向的内容。
    15 
    16 //int a =3;
    17 //int b =7;
    18 //int* p1 = &a;
    19 //int** p2 = &p1; // p2是指针的指针
    20 //*p2 = &b; // 修改p2指向的内容,就是修改p1的指向
    21 //**p2 = 8; // 两次解引用,修改p2的内容,就是修改p1的内容
  • 相关阅读:
    SpringDataJpa实体类常用注解
    I2C子系统
    input子系统
    platform深入
    运用层是怎样找到驱动的+open中子设备识别
    misc设备
    文章标题
    uboot2015第一阶段---SPL
    git工具使用
    Andriod底层第五课------HAL硬件抽象层
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3581025.html
Copyright © 2011-2022 走看看