2-2 C++中的引用

目录

一、引用的语法与使用

二、引用与函数

1. 引用做函数参数

2. 引用做函数返回值

三、引用的本质

四、常量引用


通过引用,可以给变量取别名,并通过这个别名访问原变量的内存。

一、引用的语法与使用

引用的定义语法:数据类型 &别名 = 原名;

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

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

b = 1000; //修改b的值时,a的值也会被修改
cout << "a = " << a << endl;
cout << "b = " << b << endl;
a = 10
b = 10
a = 1000
b = 1000
请按任意键继续. . .

注:

  • 定义引用时必须进行初始化;
  • 引用初始化后,不可进行修改,即只能作为一个变量的引用。

二、引用与函数

1. 引用做函数参数

函数传参时可以利用引用的技术实现形参对实参的修饰,即通过改变形参来改变实参。

#include <iostream>
using namespace std;

//定义交换函数
//1.使用值传递
void swap01(int a, int b) {
	int temp = a;
	a = b;
	b = temp;
}

//2.使用地址传递
void swap02(int * a, int * b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}

//3.使用引用传递
void swap03(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

int main() {

	
	int a = 10;
	int b = 5;

	cout << "调用值传递交换函数前:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	swap01(a, b);
	cout << "调用值传递交换函数后:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	//恢复初值
	a = 10;
	b = 5;
	cout << "调用地址传递交换函数前:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	swap02(&a, &b);
	cout << "调用地址传递交换函数后:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	//恢复初值
	a = 10;
	b = 5;
	cout << "调用引用传递交换函数前:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	swap03(a, b);
	cout << "调用引用传递交换函数后:" << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;

	system("pause");

	return 0;
}
调用值传递交换函数前:
a = 10
b = 5
调用值传递交换函数后:
a = 10
b = 5
调用地址传递交换函数前:
a = 10
b = 5
调用地址传递交换函数后:
a = 5
b = 10
调用引用传递交换函数前:
a = 10
b = 5
调用引用传递交换函数后:
a = 5
b = 10
请按任意键继续. . .

2. 引用做函数返回值

  • 函数返回值类型为引用时,不能返回局部变量的引用
  • 函数返回值类型为引用时,函数调用可以作为左值
#include <iostream>
using namespace std;

int & sum(int a, int b) {
	static int temp; //当函数返回值类型为引用时,不能返回局部变量的引用,因此定义静态变量
	temp = a + b;
	return temp;
}

int main() {

	
	int a = 10;
	int b = 5;
	int &sums = sum(a, b);
	cout << "sums = " << sums << endl;

	sum(a, b) = 100; //当函数返回值类型为引用时,函数调用可以作为左值
	cout << "sums = " << sums << endl;
	
	system("pause");

	return 0;
}
sums = 15
sums = 100
请按任意键继续. . .

三、引用的本质

引用在C++内部是通过指针常量实现的,因此引用具有指针常量的特性,即初始化后不可改变指向,但可以修改所指向内存的内容。即:

数据类型 &别名 = 原名;等价于 数据类型 * const 别名 = &原名;

int a = 10;

// 以下两行等级
int &b = a;

int * b = &a;

四、常量引用

常量引用主要用来修饰形参,防止误操作。即在函数的参数列表中,使用const修饰形参,防止形参对实参的修改。

#include <iostream>
using namespace std;

void showValue(const int &a) {
	// a = 10; //报错,显示左值不可修改
	cout << a << endl;
}

int main() {

	//const修饰形参的情况
	int a = 10;
	showValue(a);

	//定义引用时const直接修饰一个已知常值
	//int & temp = 10;  //报错
	const int & temp = 10; //编译器首先生成一个临时变量赋值为10,再将这个临时变量赋值给引用:int a = 10; const int & temp = a;(a为临时变量,我们无法获取)
	
	system("pause");

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值