C++ “ 引用 ” 介绍、举例

36 篇文章 0 订阅

引用经典案例

实现swap函数

#include <iostream>

using namespace std;
void swap1(int &a, int &b);

int main(void)
{
	int x = 4, y = 6;
	swap1(x, y);
	cout << x << "," << y << endl;
	return 0;
}

void swap1(int &a, int &b)
{
	int tmp;	
	tmp = a;
	a = b;
	b = tmp;
}

引用定义和识别的关键:&符号,注意与取地址无关
引用符号(不是变量)在定义时必须同时初始化,以后不能再另外赋值,只能使用

#include <iostream>

using namespace std;
void swap1(int &a, int &b);

int main(void)
{
	int x = 4, y = 6;
	int &b1 = x;	//定义一个引用符号b1,关联到x
	b1 = 44;	
	cout << x << endl;	//输出x = 44
	return 0; 
}

引用和指针对比

(1)指针在C和C++中都有,且使用方法和实现本质完全相同;引用只有C++可用
(2)引用可以理解为功能弱化、安全性增强的低配版指针
(3)引用能做的事指针都能做,但指针能做的事引用不一定能做
(4)引用是它指向变量的“别名”,这个是从引用的使用效果角度讲的
(5)引用比指针弱的地方就是一个引用定义时绑定了一个变量,后面无法改变
(6)引用比指针强的地方也是没法改,所以不存在"野指针"问题,更安全
(7)引用主要用在函数传参和返回值

引用的本质剖析

1.引用可以加const修饰
(1)const int &b = a; 表示b是a的const别名,无法通过b修改a了

#include <iostream>

using namespace std;

int main(void)
{
	int x = 4, y = 6;
	const int &b1 = x;
	x = 44;
	// b1 = 44;	编译报错

(2)主要用在函数形参中,表示该函数内部不会修改实参的值。用在某些时候我们有一个非const类型的变量,但是我们在某个函数调用的过程中,不希望变量的值在函数内部被修改,这时候就可以用const引用来传参

int strcmp(const char &p1, const char &p2);

char a1 = 'A', a1 = 'b';
const char &ra1 =  a1;
const char &ra2 = a2;
func(ra1, ra2);	//在func内部不会修改 ra1和 ra2
a1 = 'B';		//实际上 a1和 a2可以修改

2.引用和sizeof运算符
(1)sizeof引用得到的不是引用本身的大小,而是引用指向的目标变量的大小
(2)在struct或class中定义一个引用,再sizeof整个struct或class就会不一样

#include <iostream>

using namespace std;

struct s1
{
	int a;
	int &b;
};

int main(void)
{
	int x = 4;
	double y = 6;
	int &b1 = x;
	double &b2 = y;
	
	cout << sizeof(b1) << "--" << sizeof(b2) << endl;
	cout << sizeof(struct s1) << endl;
	
	return 0;
}

输出:
4–8
8

3.引用的本质是const指针

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值