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

C++学习笔记之引用(基础)

C++学习笔记之引用

https://www.runoob.com/cplusplus/cpp-references.html

引用变量是一个别名,它是已存在变量的另一个名字
一旦把引用初始化为某个变量,可以使用该引用名称或变量名称来指向变量

1、引用vs指针

引用和指针之间有一些相似,也有一定不同:
①不存在空引用,引用必须连接到一块合法的内存
②一旦引用被初始化为一个对象,就能不能被指向另一个对象,而指针可以在任何时候指向另一对象
③引用必须在创建时初始化,指针可以在任何时间初始化

还是回到引用最初的特征——“别名”,如果需要给一个人起个绰号,那么这个人首先要存在,那么引用自然不会有引用,而且别名和对象自身指向的其实是同一个东西,就比如“香帅”和楚留香其实是同一个人,这样理解是否更加形象一些呢?

而指针则是更加灵活,不像引用与变量深度绑定,更偏向于工具,是内存操作的媒介

2、创建引用

引用是变量在内存中的第二标签,也可以理解为先前所说的变量的“绰号”
因此,在引用关联到变量上之后,通过原始的变量名或者是引用二者都可以访问该变量的内容,指向的是同一块内存

int value = 18;
int &r = value;
cout << &value << endl;
cout << &r << endl;

在这里插入图片描述
在声明完引用后,引用就可以和原始变量一样使用,使用&可以将变量作为引用绑定到右值上

3、把引用作为参数

引用也可以作为函数的参数使用

void swap(int& x, int& y) {
  int temp;
  temp = x; 
  x = y;    
  y = temp;
}
int x = 10;
int y = 20;
swap(x, y);   // 内存地址的交换
cout << x << endl;
cout << y << endl;

引用的实质是内存地址,尤其是对于一些内容进行修改时
经常会涉及值传递引用传递的区别,值传递在函数结束后,并没有改变原来的值,因为参数只是被复制到函数中,操作的并不是原始的变量,因而调用结束后,没有修改传入的值;而引用则是修改的地址,因此最终改变的是地址,那么是确实修改了对应变量的内容

4、把引用作为返回值

通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护
通过函数返回引用的方式与返回指针的方式非常类似
在这里插入图片描述
但是,有一点需要注意,这里和返回指针类似,局部变量需要考虑生命周期,因此不能返回局部变量引用,因为函数调用结束会面临销毁,指向它的引用就会异常,上面框出的代码是有问题的

这里同样使用static进行处理

int& updateValue(int value)
{
	static int p = 10;  // 此时是全局作用域
	int& ref = p;
	return ref;
}
http://www.dtcms.com/a/12633.html

相关文章:

  • ardunio超声波测距实验
  • Docker和anaconda的区别?
  • 单向循环链表
  • Spring Cloud集成Gateaway
  • Linux:git
  • Linux——进程状态
  • 基于SpringBoot的扶贫助农管理系统
  • 滑动窗口算法—字符串的排列
  • 路线查询|基于springboot的公交线路查询系统设计与实现(附项目源码+论文+数据库)
  • MATLAB求解微分方程和微分方程组的详细分析
  • 品胜电子携手成都蓉城,共谋“商业+体育”合作新篇章
  • 【python - 函数】
  • 76-mysql的聚集索引和非聚集索引区别
  • 类的初始化列表
  • 如何通俗易懂的解释TON的智能合约
  • 什么是APT攻击,有哪些防御策略
  • Android Framework(五)WMS-窗口显示流程——窗口布局与绘制显示
  • 数据流通有风险,跨域管控来护航
  • Python 数学建模——Fitter 拟合数据样本的分布
  • tensor连接和拆分
  • 零基础如何成为一名黑客?小白必学的12个基本步骤,带你从零基础入门到进阶(超详细)
  • Git的学习笔记
  • PP_HTONL(x)
  • Cenos7镜像+Docker问题
  • FAT32文件系统详细分析 (格式化SD nandSD卡)
  • MySQL用户管理(DCL)
  • 极狐GitLab CI/CD 功能合集(超详细教程)
  • 面试干货|2024软件测试面试题汇总
  • spring security OAuth2 搭建资源服务器以及授权服务器/jdbc/jwt两种方案
  • 飞速(FS)与西门子联合打造交换机自动化灌装测试生产线