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;
}
相关推荐
中屹指纹浏览器10 分钟前
2026浏览器指纹检测技术演进与多账号反检测实战策略
经验分享·笔记
feng_you_ying_li12 分钟前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
小樱花的樱花1 小时前
打造高效记事本:UI设计到功能实现
开发语言·c++·qt·ui
独小乐1 小时前
012.整体框架适配SDRAM|千篇笔记实现嵌入式全栈/裸机篇
c语言·汇编·笔记·单片机·嵌入式硬件·arm·gnu
零二年的冬1 小时前
epoll详解
java·linux·开发语言·c++·链表
卡布叻_星星1 小时前
AI大模型之采用DeepSeek-Coder:6.7b + Ollama + Continue离线部署
笔记
wb1891 小时前
NoSQL数据库Redis集群重习
数据库·redis·笔记·云计算·nosql
坚持编程的菜鸟1 小时前
The Blocks Problem
数据结构·c++·算法
tankeven1 小时前
HJ171 排座椅
c++·算法
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 39. 组合总和 | C++ 回溯算法与 startIndex 剪枝
c++·算法·leetcode