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;
}
相关推荐
凉、介18 分钟前
ARM 总线技术 —— AMBA 入门
arm开发·笔记·学习
日更嵌入式的打工仔30 分钟前
嵌入式入门:APP+BSP+HAL 三层分级架构浅析
笔记·单片机·嵌入式硬件·学习
长桥夜波44 分钟前
【第十八周】机器学习笔记07
人工智能·笔记·机器学习
摇滚侠44 分钟前
Spring Boot 3零基础教程,yml文件中配置和类的属性绑定,笔记15
spring boot·redis·笔记
深思慎考1 小时前
RabbitMQ 入门:基于 AMQP-CPP 的 C++ 实践指南与二次封装
开发语言·c++·分布式·rabbitmq·api
深思慎考1 小时前
Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)
c++·ubuntu·rabbitmq·github·rabbitmqpp
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 HTTP 缓存机制 笔记29
spring boot·笔记·缓存
大白的编程日记.1 小时前
【Linux学习笔记】线程同步与互斥之生产者消费者模型
linux·笔记·学习
新子y1 小时前
【小白笔记】strip的含义
笔记·python
摇滚侠2 小时前
Spring Boot 3零基础教程,WEB 开发 内容协商 接口返回 YAML 格式的数据 笔记35
spring boot·笔记·后端