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;
}
相关推荐
心祭丫丫20 分钟前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
D e re k ZH2 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
派大猩猩_2 小时前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
zjxtxdy4 小时前
C++面向对象程序开发-类与对象
开发语言·c++
東隅已逝,桑榆非晚5 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
qq_406981036 小时前
c++拷贝构造函数
开发语言·c++
叼烟扛炮7 小时前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮7 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
H.莓飛8 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla8 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法