【C++初阶】引用 落日映苍穹つ 2024-04-22 12:01 20阅读 0赞 ## ![1050aff8cfd744e58a47ab6decd6fb5c.gif][] ## ## 一.概念 ## > **引用就是取别名**,在语法上它不会开空间,而是和它引用的变量**共用同一块空间**。**对引用的操作也就是对原来变量的操作**。就像现实生活中给人取外号一样,不管是喊外号还是本名,指的都是那个人。 ![92775da9fc714d2db4356287ab10775b.png][] -------------------- ## 二.引用特性 ## > 1.引用类型必须和引用实体是**同种类型**的; > > 2.引用在定义时**必须初始化**; > 3. **一个变量可以有多个引用**; > > ![73243d79a9ae4104b5724c359b7683ca.png][] > > 4.**引用只能有一个实体**,它和指针不同,指针能够改变指向,而引用不能。 > > ![319c8efe28c0411a8e8b0a67b5d25198.png][] > > 所以上图中的 b=x ,是**赋值语句**,而不是b引用x; > 5.**引用的权限可以缩小,可以平移,但不可以放大**; > > 权限放大: > > ![e4033a8efa2a4ca9b697769ca6117f14.png][] > > 权限缩小: > > ![98b7a223b5df4096a24253958488005a.png][] > > 权限平移: > > ![e0abcfd26a1d46b197163d4395e5da7f.png][] -------------------- ## 三.使用场景 ## ### 引用做参数 ### > 1.**做输出型参数**(输出型参数就是形参的改变会改变实参,输入型参数相反); > > 2**.减少拷贝,提高效率(在遇到大对象,或者是要深拷贝时宜用)**; 举一个典型的例子,C语言阶段我们都写过交换函数,当时是用的指针实现,但现在我们可以用引用实现: ![522871eaf1544b4e8a4c20da862a2ed5.png][] ### 引用做返回值 ### > 1.**减少拷贝,提高效率**(在遇到大对象,或者是要深拷贝时宜用); > > 2.**修改返回值+获取返回值**; > > ![4164c66b400c4ffcbb60e7d8b8c472a6.png][] > 引用做参数可以随便用,但是**引用做返回值可不敢随便用**; > > 1.如果函数结束,**返回的变量不销毁,可以用引用做返回值**; > > 2.如果函数结束,**返回的变量销毁,则不可以用引用做返回值**,可能会出现随机值; > > 这几点要牢记,防止出现莫名其妙的错误。 -------------------- ## 四.引用和指针的区别 ## > 在C++中引用可已用来代替指针实现一些功能,但C++并没用完全抛弃指针,有的功能就必须要用指针,所以**C++的引用不能完全代替指针**; > > 实际上,**引用的底层使用指针实现的**,所以实际上引用是开空间的,但我们前期就认为它不开空间。 > **引用和指针的不同点:** > 1. 引用概念上定义一个变量的别名,指针存储一个变量地址; > 2. 引用在定义时必须初始化,指针没有要求; > 3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任 何一个同类型实体; > 4. 没有NULL引用,但有NULL指针; > 5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数 (32位平台下占4个字节); > 6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小; > 7. 有多级指针,但是没有多级引用; > 8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理; > 9. 引用比指针使用起来相对更安全; -------------------- > **??本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;?️?** > > **??希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;??** > > **??谢谢你的阅读。??** ![bf86bbc2e76a4338ad2803f713202a72.gif][] [1050aff8cfd744e58a47ab6decd6fb5c.gif]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/acedeea5cca14540a82047218899c507.gif [92775da9fc714d2db4356287ab10775b.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/e7af7dc79ee044fa82891e688c7cc243.png [73243d79a9ae4104b5724c359b7683ca.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/e7e8004e8eb84001aeb1342728ab6f9e.png [319c8efe28c0411a8e8b0a67b5d25198.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/87f21b2743e4424bb72d8e1d2092b9e3.png [e4033a8efa2a4ca9b697769ca6117f14.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/ff2ce47aa5934e75b38353f6ea7628bf.png [98b7a223b5df4096a24253958488005a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/7f1db4a529a045a782d3a2889375e2fd.png [e0abcfd26a1d46b197163d4395e5da7f.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/7c00aae74eba4b049a4122acb3557478.png [522871eaf1544b4e8a4c20da862a2ed5.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/32d6372990724b38bcf1705faf9ae020.png [4164c66b400c4ffcbb60e7d8b8c472a6.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/30a531dff25f4e23a6b1c82e343b108f.png [bf86bbc2e76a4338ad2803f713202a72.gif]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/7e9b4064998042eca3740b3414595e99.gif
还没有评论,来说两句吧...