一.概念
引用就是取别名,在语法上它不会开空间,而是和它引用的变量共用同一块空间。对引用的操作也就是对原来变量的操作。就像现实生活中给人取外号一样,不管是喊外号还是本名,指的都是那个人。
二.引用特性
1.引用类型必须和引用实体是同种类型的;
2.引用在定义时必须初始化;
3. 一个变量可以有多个引用;
4.引用只能有一个实体,它和指针不同,指针能够改变指向,而引用不能。
所以上图中的 b=x ,是赋值语句,而不是b引用x;
5.引用的权限可以缩小,可以平移,但不可以放大;
权限放大:
权限缩小:
权限平移:
三.使用场景
引用做参数
1.做输出型参数(输出型参数就是形参的改变会改变实参,输入型参数相反);
2.减少拷贝,提高效率(在遇到大对象,或者是要深拷贝时宜用);
举一个典型的例子,C语言阶段我们都写过交换函数,当时是用的指针实现,但现在我们可以用引用实现:
引用做返回值
1.减少拷贝,提高效率(在遇到大对象,或者是要深拷贝时宜用);
2.修改返回值+获取返回值;
引用做参数可以随便用,但是引用做返回值可不敢随便用;
1.如果函数结束,返回的变量不销毁,可以用引用做返回值;
2.如果函数结束,返回的变量销毁,则不可以用引用做返回值,可能会出现随机值;
这几点要牢记,防止出现莫名其妙的错误。
四.引用和指针的区别
在C++中引用可已用来代替指针实现一些功能,但C++并没用完全抛弃指针,有的功能就必须要用指针,所以C++的引用不能完全代替指针;
实际上,引用的底层使用指针实现的,所以实际上引用是开空间的,但我们前期就认为它不开空间。
引用和指针的不同点:
1. 引用概念上定义一个变量的别名,指针存储一个变量地址;
2. 引用在定义时必须初始化,指针没有要求;
3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任 何一个同类型实体;
4. 没有NULL引用,但有NULL指针;
5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数 (32位平台下占4个字节);
6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小;
7. 有多级指针,但是没有多级引用;
8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理;
9. 引用比指针使用起来相对更安全;
🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻
😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩
😍😁谢谢你的阅读。😸😼