您的位置:首页 > 其它

指针与引用同与不同

2015-11-14 21:54 141 查看
一、指针与引用的定义及特性

  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.存在数组的引用,但是没有引用的数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: