指针与引用同与不同
2015-11-14 21:54
141 查看
一、指针与引用的定义及特性
A、引用(reference):为一个已经存在的对象另起一个名字。它有以下特性:
1.必须初始化
2.始终指向同一个对象,不能更改其所指向的对象
3.自身只是一个别名,不占内存,对其取地址是其指向对象的地址
4.常量引用的意义在于不能通过引用来修改其所指向对象的值,其所指对象可以不是常量
B、指针(pointer):一个普通变量,其内容为一块地址。引用相比它有以下特性:
1.可以不被初始化
2.生命周期里可以更改所指向的地址
3.自身也是一个对象,自己占一块内存,对其取地址得到其所占内存的地址
4.指针的常量性分为:顶层const(指针本身是个常量)和底层const(指针所指的对象是一个常量)
二、指针与引用的个人理解
1.唯一的共同使用场景是在函数参数传递中,为了避免拷贝构造带来的性能影响或者不能进行拷贝,这时就需要进行传引用或者传指针来代替。
2.优先使用引用,引用使用起来更直接和简单;
3.指针功能更强大,但是也更容易用错,底层const顶层const就能让一些人犯晕。
4.确定不改变其传入参数时,请加上const,传入const引用或底层const
5.有指向指针的引用,但是没有指向引用的指针(引用自身不占内存)
6.存在数组的引用,但是没有引用的数组
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.存在数组的引用,但是没有引用的数组
相关文章推荐
- 建立TCP连接的三次握手
- poj Bad Hair Day 3250 (栈++技巧) 好题
- 邮件的发送
- Java json && 框架中的 泛型 + 反射
- CKFinder(Java版)以时间作上传文件的保存路径
- 汉诺塔递归实现
- 前端进阶试题
- 读《不要等到毕业以后》有感②
- 九度oj-1037-Powerful Calculator
- 代理模式-Proxy
- 安装opencv3.0.0与配置Visual studio 2008
- Java Socket实现多客户端通信(通过DOS命令窗口模拟)
- PHP类相关函数
- 补码加减法器
- fpm打包
- hdoj 2151 Worm 【dp】
- 插入排序Java代码实现
- EditText无法快速响应点击事件
- 装饰者模式-Decorator
- 确认字符ACK