c++引用与指针的区别及引用的底层实现

引用的特点:
①一个变量可取多个别名。
②引用必须初始化。
③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。

使用引用时须注意:
(1)&在这里不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
(5)对引用求地址,就是对目标变量求地址。即引用名是目标变量名的一个别名。
(6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的集合,但是可以建立数组的引用。
(7)引用常见的使用用途:作为函数的参数、函数的返回值。
(8)不要返回一个临时变量的引用。
(9)如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。

引用和指针的区别和联系:
(1)指针是一个实体,而引用仅是个别名;
(2)引用只能在定义时初始化一次,之后不能绑定到其它变量(从一而终);指针变量的值可变。
(3)引用必须指向有效的变量,指针可以为空。
(4)sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
(5)指针和引用自增(++)自减(–)意义不一样,引用的自增是绑定对象的自增,指针的自增是地址以所指对象类型大小为单位移动一个单位,指向下一个地址。
(6) 相对而言,引用比指针更安全,指针比引用更为灵活,但是其风险也很大。使用指针时一定要检查指针是否为空(NULL),且空间回收后指针最好置零,以免野指针的发生造成内存泄漏等问题。

引用的实现:
理论上引用不占内存空间而指针占用内存空间,但实际上编译器是使用const指针来实现引用的,只是把这一细节对上层屏蔽了。
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_38216239/article/details/80488549