C++ 引用

C++ 引用

1. 引用的基本使用

作用: 给变量起别名
语法: 数据类型 &别名 = 原名
在这里插入图片描述
注意:

  • 别名的数据类型要和原名的相同;
  • 别名和原名操作的是同一块空间
    请添加图片描述

2.引用的注意事项

  • 引用必须初始化
  • 引用在初始化后,不可以改变
    在这里插入图片描述

3.引用做函数参数

  • 之前学到的函数参数时,一种是值传递,一种是地址传递。值传递中形参不可以修饰实参;地址传递则可以
  • 引用做函数参数时,可以简化指针来修改实参。也就是说,函数传参时,可以利用引用的技术让形参修饰实参

1)值传递

形参不改变实参
请添加图片描述

2)地址传递

形参改变实参
在这里插入图片描述

3)引用传递

形参改变实参
在这里插入图片描述
形参会改变实参是因为,调用swap3时,传入的是主函数中实参a的别名,即swap3中的a,int& a = a
也就是说,swap3中的a是主函数中的a的别名,只是作为形参的形式,两个a操作的都是同一块空间,所以可以达到形参修改实参的效果,b同理。别名也可以和原名相同
相比于指针,省去了解引用,理解起来简单

4.引用做函数的返回值

引用可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用作为左值
在这里插入图片描述

1)红框中

我觉得这部分的原因和之前局部变量的地址不能返回堆区-new关键字是一个道理
test1子函数中返回的是局部变量a,在主函数中相当于创建了一个别名ref来接收a。
tese1子函数中a存在放在栈上,其内存被自动释放了,所以不能访问

2)蓝框中

此时用static把test2中局部变量a的生命周期变长,即变成静态变量,存在全局区,直到程序结束后才被释放内存

3)绿框中

左值就是等号左边的值,是变量;
此时test2()调用之后返回的是a,然后再a=45,相当于做了赋值操作“a = 45” ;
test2相当于是a的别名,然后通过赋值操作把45赋值给test2,也就是45赋值给a,操作的是同一块空间

4)注意

	int& ref2 = test2();

这里的ref2是引用,test2是a的别名,ref2是test2的别名;

	test2() = 45;

这里的test2是a的别名,test2()=45是赋值,相当于a=45

5.引用的本质

引用的本质在c++内部实现是一个指针常量
指针常量本质是指针,但指针的指向不可以更改,指针的值可以更改
打个比方,车牌号不能改,车里边的人可以换

int a = 56;
int& ref = a;

//这两句执行后,自动转换为 int* const ref = &a,由于使用了const来修饰,所以指针常量也就是引用的指向不可以更改
引用的注意事项说到引用初始化之后就不可以更改,也是因为使用了const来修饰了指针,变成指针常量
此时ref = a = 56

ref = 50;

再执行这一句,编译器识别到ref是引用,会自动解引用,*ref = 20
此时ref = a = 20
在这里插入图片描述

画图理解

在这里插入图片描述
用引用的时候直接使用,使用比指针方便,但要知道其本质是什么

6.常量引用

作用: 常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参

	int a = 56;
	//int& ref = 10;//不合法,引用必须使用一块合法的空间
	const int& ref = 10;//这是合法的,此时引用引的是一块临时空间 加入const后 int temp = 10;const int& ref = temp;
	//ref = 20;//加const后变为只读,不可以修改

int& ref = 10,是不合法的,引用必须使用一块合法的空间
加入const合法是因为编译器做了优化,int temp = 10;const int& ref = temp; 此时引用引的是一块临时空间,此时ref是只读,不可修改
在这里插入图片描述
如果代码量大的话,使用引用可能会出现形参误修改实参,为了防止这种情况,加入const修饰
在这里插入图片描述
黑马老师~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值