码迷,mamicode.com
首页 > 其他好文 > 详细

指针与引用同与不同

时间:2015-11-14 23:13:23      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:

一、指针与引用的定义及特性

  A、引用(reference):为一个已经存在的对象另起一个名字。它有以下特性:

  1.必须初始化

  2.始终指向同一个对象,不能更改其所指向的对象

  3.自身只是一个别名,不占内存,对其取地址是其指向对象的地址

  4.常量引用的意义在于不能通过引用来修改其所指向对象的值,其所指对象可以不是常量

    int tempA = 2;
    const int ctempA = 2;

    /*1.正常使用*/
    int &refA = tempA;
    const int &crefA = ctempA;
    /*2.常量引用可以指向普通对象*/
    const int &crefB = tempA;
    /*3.引用的地址是所指对象的地址,三者相同*/
    cout<<"&tempA = "<<&tempA<<endl;
    cout<<"&refA  = "<<&refA<<endl;
    cout<<"&crefB = "<<&crefB<<endl;
    /*4.crefC指向一个临时对象,其对象被引用接管了*/
    const int&crefC = 3;
    /*5.没有临时对象产生,编译不过*/
    int &refC = 3;
    /*6.没有进行初始化,编译不过*/
    int &refB;
    /*7.普通引用不能指向常对象,编译不过*/
    int &refD = ctempA;

 

  B、指针(pointer):一个普通变量,其内容为一块地址。引用相比它有以下特性:

  1.可以不被初始化

  2.生命周期里可以更改所指向的地址

  3.自身也是一个对象,自己占一块内存,对其取地址得到其所占内存的地址

  4.指针的常量性分为:顶层const(指针本身是个常量)和底层const(指针所指的对象是一个常量)

    int tempA = 2;
    const int ctempA = 2;

    /*1.下列定义分别为:普通指针、顶层const指针、底层const指针和const指针*/
    int *ptrA;
    int * const topLevelConstPtrA = &tempA;
    const int *lowLevelConstPtrA;
    const int * const constPtrA = &ctempA;
    /*2.使用过程中对其赋值*/
    ptrA = &tempA;
    /*3.三者一样,指针保存着所指对象的地址*/
    cout<<"&tempA    = "<<&tempA<<endl;
    cout<<"ptrA        = "<<ptrA<<endl;
    cout<<"topLevelConstPtrA = "<<topLevelConstPtrA<<endl;
    /*4.三者不一样,指针有自己的内存*/
    cout<<"&tempA    = "<<&tempA<<endl;
    cout<<"&ptrA    = "<<&ptrA<<endl;
    cout<<"&topLevelConstPtrA = "<<&topLevelConstPtrA<<endl;

 二、指针与引用的个人理解

  1.唯一的共同使用场景是在函数参数传递中,为了避免拷贝构造带来的性能影响或者不能进行拷贝,这时就需要进行传引用或者传指针来代替。

  2.优先使用引用,引用使用起来更直接和简单;

  3.指针功能更强大,但是也更容易用错,底层const顶层const就能让一些人犯晕。

  4.确定不改变其传入参数时,请加上const,传入const引用或底层const

  5.有指向指针的引用,但是没有指向引用的指针(引用自身不占内存)

  6.存在数组的引用,但是没有引用的数组

指针与引用同与不同

标签:

原文地址:http://www.cnblogs.com/cauchy007/p/4965155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!