指针与引用的区别

来源:互联网 发布:测试反应力软件 编辑:程序博客网 时间:2024/05/23 00:01

相同点
指针与引用都是地址的概念,指针指向的是一块内存,它的内容是这块内存的地址;引用是某块内存的别名。

区别:
1.指针是一个实体,而引用仅仅只是一个别名。
2.引用使用时不需要解引用‘*’,指针使用时需要解引用。
3.引用只能在定义的时候被初始化一次,之后不能再改变作为别的变量的别名,而指针可以在任意时候改变它的指向(const指针除外)。
4.引用的对象必须是有效的一个变量,不能为空;指针可以有空指针。
5.sizeof引用得到的是引用对象的大小,而sizeof指针是指针所指向对象的地址的大小,在32位平台下指针的大小为4个字节,在64位平台下指针的大小为8个字节。
6.指针与引用++的含义不一样,引用++是将引用的对象的值++,指针是在该地址上往后指针指向对象大小的空间,比如该对象是int,则往后4个字节的空间。

不要返回一个临时变量的引用,如果返回对象出了当前作用域依旧存在,则最好返回引用,因为这样更高效。引用要求类型必须严格保持一致。但是有两种特例:第 一种就是在初始化常量引用允许用任意表达式作为初始值,只要该 表达式的结果可以转换成引用的类型。当一个常引用被绑定到另一个类型上时,常引用绑定的是另一个类型对象强转之后的一个临时对象。

联系
1.引用在内部其实是由指针实现的。
2.一般而言,把引用理解为指针不会犯严重的语义错误,引用可以理解为操作受限制的指针。

那么指针比引用更灵活,能完成的操作更多,c++中为什么还要引入引用的概念呢?

指针虽然比引用更加灵活,但同时它也比引用更加危险。使用指针时我们必须判断指针是否为空,在指针所指向的地址被释放了以后,最好将指针也置为空。一旦出现内存被释放了以后,指针却还指向该内存,就会出现“野指针”的问题,容易出现内存泄漏。
对于使用引用和指针的时机,总的来说,在以下情况下你应该使用指针,一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
还有一种情况,就是当你重载某个操作符时,你应该使用引用。最普通的例子是操作符[].这个操作符典型的用法是返回一个目标对象,其能被赋值。

总之一句话,尽可能地使用引用,迫不得已使用指针。

原创粉丝点击