C++笔记:引用

目录

概念:

​编辑

引用的特性:

引用中的权限问题:

引用与指针的区别:

引用的使用:

概念:

引用是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间。

引用的符号:&

引用的方式:数据类型+&+数据名

概念证明:

cpp 复制代码
int main()
{
	int i = 100;
	int& m = i;
	cout << m << endl;
	return 0;
}


引用的特性:

1.引用必需初始化。

2.引用一旦引用一个实体,就不能再引用其它实体。

3.不存在空引用。

4.不存在多级引用。

代码演示:

cpp 复制代码
int main()
{
	int i = 100;
	int& m = i;
	int n = 1000;
	m = n;//这里改变m进行测试
	cout <<"m=" << m << endl;
	cout <<"i=" << i << endl;
	return 0;
}

这里有读者会问将m=n的代码写为&m=n不就可以了吗,这里我需要解释一下&m=n的含义:

&m=n,表示将m的地址改为n的值,这样写编译器会直接报错!

所以在学到引用时,这里我们需要注意不要将引用与指针相混淆!!!!


引用中的权限问题:

对于数据的引用我们需要注意引用后数据的权限可以平移或缩小,但不能扩大。(也可以理解为:引用需要确保数据安全)。

代码演示:

cpp 复制代码
int main()
{
	const int i = 100;
	int& m = i;
	return 0;
}

这里我们运行代码,会发现报这样的错误:

这里我们就存在数据权限放大问题:原先的数据i是不可以更改的,而我们对数据进行引用后的m是可以更改的,这样写会放大数据的权限,也就是会破坏数据的安全。

但是数据的权限是可以平移或者缩小的

cpp 复制代码
int main()
{
	const int i = 100;
	const int& m = i;//权限平移

	int n = 1000;
	const int& q = n;//权限缩小

	cout << "m=" << m << endl;
	cout <<"q=" << q << endl;
	return 0;
}

引用与指针的区别:

这里关于引用与指针的区别我们不再一一对比但是我们再将指针的特点讲述一下:

指针的特点:
1.可以不用初始化

2.可以改变指向的对象

3.可以指向空地址(NULL或者nullper)

4.存在多级指针


引用的使用:

扩展的了解一下:引用的底层实现其实是指针。

**个人理解:**对于引用的大部分场景其实也可以将其理解为指针

cpp 复制代码
void mySwap(int& a, int& b)
{
	int c = a;
	a = b;
	b = c;
}
int main()
{
	 int i = 100;
	 int& m = i;

	 int n = 1000;
	 int& q = n;

	cout << "m=" << m << endl;
	cout <<"q=" << q << endl;

	mySwap(m, q);

	cout << "交换后:" << endl;
	cout << "m=" << m << endl;
	cout << "q=" << q << endl;
	return 0;
}
相关推荐
Piko61441 分钟前
锐捷交换机 DHCP Server部署
运维·网络·笔记
KuaCpp1 小时前
C++进程(下)
c++
取地址符2 小时前
Rust学习笔记(基于Rustlings)(2):数据结构与集合
笔记·学习·rust
来一碗刘肉面2 小时前
C++中的引用语法
c++·算法
杜子不疼.2 小时前
【Qt初识】工程起步:项目创建、代码解读与对象树
数据库·c++·qt
A.零点2 小时前
期末复习,408考研数据结构:第一章绪论完整知识梳理与真题深度解读
c语言·数据结构·笔记·考研
茯苓gao3 小时前
嵌入式开发笔记:工业机器人通信协议深度解析——从现场总线到工业以太网
笔记·嵌入式硬件·学习·机器人·信息与通信
取地址符3 小时前
Rust语法学习 (基于Rustlings)(1):基础语法
经验分享·笔记·学习·rust
知无不研3 小时前
算法:Fizz Buzz解题思路
c++·算法·leetcode
不会调制解调的猫3 小时前
笔记 | 什么是 rp_filter(反向路径过滤)?
服务器·网络·笔记