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的内容
  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3581025.html
Copyright © 2011-2022 走看看