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;
}
相关推荐
哈哈不让取名字几秒前
分布式日志系统实现
开发语言·c++·算法
知无不研7 分钟前
实现一个整形栈
c语言·数据结构·c++·算法
蒸蒸yyyyzwd10 分钟前
mapreduce步骤学习总结
笔记
ShineWinsu1 小时前
对于C++:模版初阶的解析
开发语言·c++·面试·笔试·函数··模版
saoys1 小时前
Opencv 学习笔记:轮廓发现(提取 + 绘制全流程)
笔记·opencv·学习
Max_uuc1 小时前
【C++ 硬核】告别 Excel 生成数组:利用 constexpr 实现编译期计算查找表 (LUT)
开发语言·c++·excel
m0_748248651 小时前
C++正则表达式攻略:从基础到高级应用
java·c++·正则表达式
退休钓鱼选手1 小时前
[CommonAPI + vsomeip]通信 原理 1
c++·自动驾驶
CSDN_RTKLIB2 小时前
【字符编码】源文件编码与字符字节序列
c++
2401_838472512 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法