C++核心_2引用

2 引用:给变量起别名

2.1 引用基本使用(改别名,原名会变)

# include<iostream>
using namespace std;
int main() {
	int a = 10;
	int& b = a;
	cout << "改前a=" << a << endl;
	cout << "改前b=" << b << endl;
	b = 100;
	cout << "改后a=" << a << endl;
	cout << "改后b=" << b << endl;
	return 0;
}

在这里插入图片描述

2.2 引用注意事项(引用必须初始化,并且不能更改)

# include<iostream>
using namespace std;
int main() {
	int a = 10;
	int& b = a;
	//1引用必须初始化
	int& c; //报错
	//2不能更改引用
	int d = b; //赋值操作
	return 0;
}

2.3 引用做函数参数

作用:函数传参时,引用让形参修饰实参 (地址传递,引用传递)
优点:简化指针修改实参

# include<iostream>
using namespace std;
// 函数交换
//1 值传递
void myswap01(int a, int b)
{
	int temp = b;
	b = a;
	a = temp;
}
//2 地址传递
void myswap02(int *a, int *b)
{
	int temp = *b;
	*b = *a;
	*a = temp;
}
//3 引用传递
void myswap03(int&a, int&b)
{
	int temp = b;
	b = a;
	a = temp;
}
int main() {
	int a = 10;
	int b = 20;
	//myswap01(a, b);
	//myswap02(&a, &b); // 地址传递,形参修饰实参
	myswap03(a, b); // 引用传递,形参修饰实参
	cout << "myswap03   " << "  a=" << a << "  b=" << b << endl;
	return 0;
}

2.4 引用做函数返回值

1、不要返回局部变量的引用
2、函数的调用可以作为左值

# include<iostream>
using namespace std;
int& test1() {
	int a = 10;
	cout << "ref1 = " << a << endl;
	return a;
}
int& test2() {
	static int a = 10;  // static方法将其定义为 静态变量
	cout << "ref2 = " << a << endl;
	return a;
}
int main() {
	// 引用做函数返回值
	// 1 不要返回局部变量的引用
	int& ref1 = test1();
	cout << "ref1 = " << ref1 << endl;
	// 2 函数的调用可以作为左值
	int& ref2 = test2();
	cout << "ref2 = " << ref2 << endl;
	system("pause");
	return 0;
}

2.5 引用的本质

引用的本质:在c++内部实现是一个指针常量
c++推荐使用,语法方便,所有的指针操作编译器已经帮忙实现

# include<iostream>
using namespace std;
void func(int& ref) {
	ref = 100; //ref是引用,转换为 *ref = 100
}
int main() {
	int a = 10;
	// 自动转换为 int* const ref = &a; 指针常量 指向不能改 所以 引用不能改
	int& ref = a;
	ref = 20; // 内部发现是ref 引用,会自动帮我们转换为 : *ref = 20;

	cout << "a:" << a << endl;
	cout << "ref:" << ref << endl;

	func(a);
	cout << "ref:" << ref << endl;
	system("pause");
	return 0;
}

2.6 常量引用

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

# include<iostream>
using namespace std;
void showvalue(int &val)
{
	val = 1001;
	cout << "val==" << val << endl;
}
void showvalue2(const int &val)
{
	//val = 1000; // 会提示不能修改
	cout << "val==" << val << endl;
}
int main() {
	int a = 10;
	int& ref = a; // 引用必须是合法的内存空间
	// 加const后,编译器将代码修改为 int temp = 10; const int & ref = temp;
	const int& refa = 10;  // 原名编译器起好了但不知道,ref是别名  const 只读,不能修改

	int b=100;
	showvalue(b);
	showvalue2(b);
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值