C++ 引用

温馨提示:本笔记配合视频食用更佳

https://www.bilibili.com/video/BV1et411b73Z?p=89https://www.bilibili.com/video/BV1et411b73Z?p=89

引用

1.引用的基本使用

作用:给变量取别名

语法数据类型 & 别名 = 原名

对数组的引用: 数据类型 (& 别名) [数组长度] = 原名

#include <iostream>

using namespace std;

//引用:给变量起别名
//语法 : 数据类型 & 别名 = 原名
//

int main()
{

	int a = 10;
	//创建引用
	int & b = a;

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	b = 2000;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	return 0;
}

2.引用的注意事项

·引用必须初始化

·引用在初始化后,不可以改变

就相当于给一只小狗起名叫“球球”,就不能给另一只小喵也取名为“球球”了

#include <iostream>

using namespace std;

int main()
{
	//1.引用必须要初始化
	
	int a = 10;
	int& b = a;
	cout << "b = " << b << endl;

	int c = 100;
	b = c;          //这是赋值操作,而不是更改引用
	cout << "a = " << a << endl;

	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
 
    // 2.引用一旦初始化后就不可以更改了
	//int& b = c;                        
	//cout << "a = " << a << endl;

	//cout << "b = " << b << endl;
	//cout << "c = " << c << endl;


	return 0;
}

3.引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优点:可以简化指针修改实参

观察下面三种传参函数

#include <iostream>

using namespace std;

//swap fun
//value propagation值传递
void mySwap01(int a, int b)
{
	int tmp = a;
	a = b;
	b = tmp;

	cout << "In Myswap: a = " << a << endl;
	cout << "In Myswap: b = " << b << endl;
}

//address passing
void mySwap02(int* a, int* b)
{
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

//引用传递, 引用传递也会修饰形参
void mySwap03(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}

int main()
{
	int a = 10;
	int b = 20;

	mySwap01(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	mySwap02(&a, &b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	mySwap03(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}

总结:通过引用参数产生的效果同按地址传递是一样的,引用的语法更加清楚简单

4.引用做函数返回值

作用:引用可以作为函数的返回值存在

注意:不要返回局部变量的引用

用法:函数调用作为左值

#include <iostream>

using namespace std;

//引用做函数的返回值
//1.不要返回局部变量的引用
int& test01()
{
	int a = 10;//局部变量存放在四区中的  栈区
	return a;
}

//2.函数的调用可以作为左值
int& test02()
{
	static int a = 10;
	return a;
}
int main()
{
	int& ref2 = test02();

	cout << "ref = " << ref2 << endl;
	cout << "ref = " << ref2 << endl;

	test02() = 2351;//   
	cout << "ref = " << ref2 << endl; 
	cout << "ref = " << ref2 << endl;

	 
	return 0;
}

 5.引用的本质

本质:引用的本质在C++内部实现是一个指针常量

ps:

指针常量:该指针是常量,指针的指向不可以修改,指向的值可以修改

#include <iostream>

using namespace std;

//引用的本质在C++内部实现是一个指针常量

//发现是引用,转化为 int* const ref = &a;
void func(int& ref)
{
	ref = 1100;//ref是引用,转化为*ref = 1100;

}

int main()
{
	int a = 10;

	int& ref = a;
	//自动转化为 int* const ref = &a;

	ref = 20;//内部发现ref是引用,自动帮我们转化为:*ref = 20;

	cout << "a = " << a << endl;
	cout << "ref = " << ref << endl;

	int* p = &a;

	int b = 20;

	p = &b;
	//cout << "ref = " << ref << endl;
	return 0;
}

C++推荐引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器帮我们做了

6.常量引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表中,可以加 const 修饰形参,防止形参改变实参

#include <iostream>

using namespace std;

//打印数据函数
void showValue(const int& val)
{
    //val = 1000;
	cout << "val = " << val << endl;
}


int main()
{
	常量引用
	使用场景:用来修饰形参,防止误操作

	int a = 10;
	int& ref = 10;WRONG
	//引用必须引一块合法的内存空间

	//const int& ref = 10;
	//加上const之后 编译器将代码改为 int tmp = 10; const int& ref = tmp;

	ref = 20; WRONG
    //加入const之后变为只读,不可以修改
	int a = 100;
	showValue(a);
	cout << "a = " << a << endl;

	return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大嘤三喵军团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值