当前位置: 首页 > article >正文

C++引用类型变量

引用变量的主要用途是用作函数的形参。这样函数将使用原始数据,而不是副本。除指针之外,引用也为处理大型结构提供了一种非常方便的途径。

再C++中使用&符号标识引用。也就是说C++给&符号赋予了另一个含义,将其用来声明引用。

引用的声明格式如下,并且rats和rodents指向了相同的值和内存单元

int rats;
int& rodents = rats;

引用的简单使用示例 

#include <iostream>

using namespace std;

int main()
{
	int rats = 101;
	int& rodents = rats;

	cout << "rats = " << rats << " ,&rats = 0x"<< &rats<< endl;
	cout << "rodents = " << rodents <<" ,&rodents = 0x"<< &rodents <<endl;
	rodents++;
	cout << "rats = " << rats << " ,&rats = 0x" << &rats << endl;
	cout << "rodents = " << rodents << " ,&rodents = 0x" << &rodents << endl;
	return 0;
}

引用的初始化示例

#include <iostream>

using namespace std;

int main()
{
	int rats = 101;
	int& rodents = rats;

	cout << "rats = " << rats << " ,&rats = 0x"<< &rats<< endl;
	cout << "rodents = " << rodents <<" ,&rodents = 0x"<< &rodents <<endl;

	int bunnies = 50;
	rodents = bunnies;
	cout << "rats = " << rats << " ,&rats = 0x" << &rats << endl;
	cout << "rodents = " << rodents << " ,&rodents = 0x" << &rodents << endl;
	cout << "bunnies = " << bunnies << " ,&bunnies = 0x" << &bunnies << endl;
	return 0;
}

这里截取一段该程序运行的结果图,进行说明:必须在引用声明的时候进行初始化。不能在初始化完成之后进行赋值操作。这种操作看起来好像是正确的。但是rodent变量的值从101变成了50,但是仔细看来rats变量的值也从101变成了50。这是因为rats和dodents的地址是一样的。而这两个地址和bunnies变量不同。所以该操作就等于是进行了如下赋值:rats=bunnies,也就是说将bunniese变量的值赋给了rats变量。所以可以通过初始化声明来设置引用,但不能通过赋值来设置。

从指针方面来理解等价于这样的操作:

int rats = 101;
int* pt = &rats;
int& rodents = *pt;
int bunnies = 50;
pt = &bunnies;

rodents初始化为*pt从而让rodents指向了rats,接下来将pt改为bunnies,并不能改变这样的事实。即rodents的引用是rats;


http://www.kler.cn/a/370829.html

相关文章:

  • 无人机技术架构剖析!
  • 频域增强通道注意力机制EFCAM模型详解及代码复现
  • 【机器学习实战入门项目】基于机器学习的鸢尾花分类项目
  • Linux的常用命令(三)
  • arcgis中生成格网矢量带高度
  • Spring AI 从入门到实践
  • 青少年编程与数学 02-002 Sql Server 数据库应用 10课题、记录的操作
  • windows文件实时同步
  • Spring Boot技术栈在厨艺交流平台中的应用
  • 面试经典 150 题.P26. 删除有序数组中的重复项(003)
  • 【JavaEE】【多线程】定时器
  • 坚持使用kimi搭建小程序2小时(04天/05天)
  • 宇音天下最新力作 | VTX356语音识别合成芯片问世
  • Angular 15 独立组件详解
  • Linux shell编程学习笔记87:blkid命令——获取块设备信息
  • 触觉智能Purple Pi OH鸿蒙开发板成功适配OpenHarmony5.0 Release,开启新征程!
  • 自动驾驶-传感器简述
  • D52【python 接口自动化学习】- python基础之模块与标准库
  • android 12 应用安装白名单
  • C++ 整型大数运算(大整数运算)项目
  • # Docker:技术架构的演进之路
  • Vue学习记录之二十一 Vue3中3种编程风格介绍
  • Vue.js/ElementUI-el-upload 与Spring Boot实现文件上传
  • 【Hadoop】hadoop的路径分不清?HDFS路径与本地文件系统路径的区别
  • 【计算机网络 - 基础问题】每日 3 题(五十四)
  • 使用ONNX Runtime对模型进行推理