C++学习 --引用

目录

1, 什么是引用

1-1, 引用注意事项

1-2, 引用做形参

1-3, 引用做函数返回值

1-4, 引用的本质

1-5, 常量引用


1, 什么是引用

引用就是给一个变量取别名, 语法是数据类型 &变量别名 = 变量名, 引用和原变量都指向相同的对象, 任意一个修改都会映射到另外一个

#include <iostream>
#include <string>

using namespace std;

/*别名和原变量指向相同的对象, 别名修改值会映射到原变量*/

int main()
{
	int a = 10;
	//变量a取别名为b
	int& b = a;

	//修改b的值
	b = 20;

	//因为b指向的是a的地址, 所以a也被修改
	cout << "a=" << a << endl;
    cout << "b=" << b << endl;

	system("pause");

	return 0;
}
-----------------------------------------------
输出结果:
a=20
b=20

1-1, 引用注意事项

引用必须要先初始化,再使用,否则编译器会报错

#include <iostream>
#include <string>

using namespace std;

/*别名和原变量指向相同的对象, 别名修改值会映射到原变量*/

int main()
{
	int a = 10;
	//引用b未初始化, 编译器会报错
	//int& b;
	int& b = a;
	int c = 20;

	//将c的值复制给b, 这样操作后a, b的值都被修改为c的值
	b = c;
	
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;

	system("pause");

	return 0;
}
------------------------------------------------------
输出结果:
a=20
b=20
c=20

注意:同名引用不能重复定义

int a = 10;
int& b = a;
int c = 20;
//与上面的引用b重复定义,会报错
int& b = c;

1-2, 引用做形参

通过引用做形参, 形参的修改会映射到实参

#include <iostream>
#include <string>

using namespace std;

/*引用做形参式, 形参修改会映射到实参*/
void swap(int& a1, int& b1)
{
	int tmp;
	
	tmp = a1;
	a1 = b1;
	b1 = tmp;
}

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

	swap(a, b);

	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
	
	system("pause");

	return 0;
}
---------------------------------------------------------
输出结果:
a=20
b=10

1-3, 引用做函数返回值

#include <iostream>
#include <string>

using namespace std;

//函数返回的是a的引用
int& func()
{	
	//若不加static, a是局部变量,在栈区,函数调用完会释放
	static int a = 10;
	return a;
}

int main()
{
	cout << "调用func:" << func() << endl;
	//引用类型的函数作为左值使用
	func() = 1000;
	cout << "调用func:" << func() << endl;
	
	system("pause");

	return 0;
}

----------------------------------------------------
输出结果:
调用func:10
调用func:1000

1-4, 引用的本质

引用本质上就是一个指针常量(指向不能修改,指向的值可以修改)  

int a = 10;
//编译器会翻译为 int * const b = &a
int& b = a;

//编译器会翻译为* b = 20
b = 20;

//引用本质是指针常量, 指针是不能附具体的值的,下面会报错
int& b = 1000;

1-5, 常量引用

常量引用用来修饰形参不会被误修改

#include <iostream>
#include <string>

using namespace std;

//概述返回的是a的引用
int func(const int & a1)
{	
	//引用a1被定义为一个常量, 所以下面的修改会报错
	a1 = 1000;
	return a1;
}

int main()
{
	int a = 10;
	//编译器翻译成int tmp = 1000; int &b = tmp, 所以不会报错
	//const int& b = 1000;

	cout << "调用func:" << func(a) << endl;

	system("pause");

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值