c++引用笔记

1 引用的基本使用

// 引用
// 作用:给变量起别名
// 语法:数据类型 &别名 = 原名int main(int argc, char const *argv[])
{int a = 10;int &b = a;cout << "a = " << a << endl;cout << "b = " << b << endl;b = 100;cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;
}

2 引用注意事项

// 引用注意事项
// 1. 引用必须初始化
// 2. 引用一旦初始化,就不能改变int main(int argc, char const *argv[])
{int a = 10;int b = 20;int &r = a;r = b; // 赋值操作不影响引用本身,即r引用ar = 30;cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "r = " << r << endl;return 0;
}

3 引用做函数参数

// 引用做函数参数
// 作用:函数传参时,可以利用引用的技术让实参传递给形参时,修改实参变量的值
// 优点:可以简化指针操作,提高程序的可读性//1. 值传递
void swap01(int a, int b){int temp = a;a = b;b = temp;
}//2. 地址传递
void swap02(int *a, int *b){int temp = *a;*a = *b;*b = temp;
}//3. 引用传递
void swap03(int &a, int &b){int temp = a;a = b;b = temp;
}int main(int argc, char const *argv[])
{int a = 10;int b = 20;cout << "交换前:a = " << a << " b = " << b << endl;swap01(a, b);cout << "值传递 交换后:a = " << a << " b = " << b << endl;swap02(&a, &b);cout << "地址传递 交换后:a = " << a << " b = " << b << endl;swap03(a, b);cout << "引用传递 交换后:a = " << a << " b = " << b << endl;return 0;
}

4. 引用做函数的返回值

#include <iostream>
using namespace std;// 引用做函数返回值
// 作用:引用可以做函数的返回值存在的
// 注意:不要返回局部变量的引用
// 用法:函数调用作为左值// 返回局部变量的引用
int& test01(){int a = 10;return a;
}// 返回静态变量的引用
int& test02(){static int a = 10;cout << &a << endl;return a;
}int& test03(){static int a = 20;cout << "test03 " <<  &a << endl;return a;
}int main(int argc, char const *argv[])
{int &b = test01();cout << &b << endl;int &c = test02();cout << &c << endl;cout << c << endl;c = test03(); // c 指向的地址不变cout << c << endl;cout << &c << endl;// 函数调用作为左值test02() = 100;cout << "函数调用作为左值 " << c << endl;return 0;
}

5. 引用的本质

#include <iostream>
using namespace std;// 引用的本质
// 本质: 引用的本质是在c++内部实现一个指针常量// 转换为 int* const ref = &a;
void func(int &ref){ref = 100; // 内部实现 *ref = 100;
}int main(int argc, char const *argv[])
{int a = 10;// 自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改int &ref = a;    ref = 20; // 内部实现 *ref = 20;cout << "a = " << a << endl;cout << "ref = " << ref << endl;func(a);cout << "a = " << a << endl;return 0;
}

6 常量引用

/#include <iostream>
using namespace std;// 常量引用
// 作用:常量引用主要用来修饰形参,在调用函数时,该形参不允许修改// 转换为 const int* const ref = &a;
void func(const int &ref){cout <<  "ref " << ref << endl;// ref = 100; // 内部实现const int *ref = 100;
}int main(int argc, char const *argv[])
{int a = 10;// int &ref = 10; // 引用必须引用一块合法的内存// 加上const后,编译器将上面的代码修改为 int temp = 10; const int &ref = temp;const int &ref = 10; // 引用必须引用一块合法的内存// ref = 20; // 加入const 后,不可修改cout << ref << endl;func(a);a = 100;func(a);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt Window应用程序去掉控制台窗口

Qt Window应用程序去掉控制台窗口 方式一 set(PROJECT_SOURCESWIN32main.cppmainwindow.hpp )add_executable(Tool-V2${PROJECT_SOURCES} )方式二 set_target_properties(Tool-V2 PROPERTIESMACOSX_BUNDLE TRUEWIN32_EXECUTABLE TRUE )参考文献&#xff1a; cmake Qt 项目…

android studio 读写文件操作(应用场景二)

android studio版本&#xff1a;2023.3.1 patch2 例程&#xff1a;readtextviewIDsaveandread 本例程是个过渡例程&#xff0c;如果单是实现下图的目的有更简单的方法&#xff0c;但这个方法是下一步工作的基础&#xff0c;所以一定要做。 例程功能&#xff1a;将两个textvi…

【NLP 9、实践 ① 五维随机向量交叉熵多分类】

目录 五维向量交叉熵多分类 规律&#xff1a; 实现&#xff1a; 1.设计模型 2.生成数据集 3.模型测试 4.模型训练 5.对训练的模型进行验证 调用模型 你的平静&#xff0c;是你最强的力量 —— 24.12.6 五维向量交叉熵多分类 规律&#xff1a; x是一个五维(索引)向量&#xff…

windows文件下换行, linux上不换行 解决CR换行符替换为LF notepad++

html文件是用回车换行的&#xff0c;在windows电脑上&#xff0c;显示正常。 文件上传到linux服务器后&#xff0c;文件不换行了。只有一行。而且相关js插件也没法正常运行。 用notepad查看&#xff0c;显示尾部换行符&#xff0c;是CR&#xff0c;这就是原因。CR是不被识别的。…

ES6关于解构的详细探讨,以及可能会出现的错误

ES6关于解构的详细探讨,以及可能会出现的错误 1.解构赋值时&#xff0c;如果等号右边是数值和布尔值&#xff0c;则会先转为对象。2.字符串的解构赋值,字符串被转换成了一个类似数组的对象3.默认值生效的条件是&#xff0c;对象的属性值严格等于undefined。4.不能使用圆括号的情…

Unity 模拟百度地图,使用鼠标控制图片在固定区域内放大、缩小、鼠标左键拖拽移动图片

效果展示&#xff1a; 步骤流程&#xff1a; 1.使用的是UGUI&#xff0c;将下面的脚本拖拽到图片上即可。 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;public class CheckImage : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragH…

游戏引擎学习第30天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 在这段讨论中&#xff0c;重点是对开发过程中出现的游戏代码进行梳理和进一步优化的过程。 工作回顾&#xff1a;在第30天&#xff0c;回顾了前一天的工作&#xff0c;并提到今天的任务是继续从第29天的代码开始&#xff0c…

基于MFC绘制门电路

MFC绘制门电路 1. 设计内容、方法与难点 本课题设计的内容包括了基本门电路中与门和非门的绘制、选中以及它们之间的连接。具体采用的方法是在OnDraw函数里面进行绘制&#xff0c;并设计元器件基类&#xff0c;派生出与门和非门&#xff0c;并组合了一个引脚类&#xff0c;在…

【text2sql】低资源场景下Text2SQL方法

SFT使模型能够遵循输入指令并根据预定义模板进行思考和响应。如上图&#xff0c;、 和 是用于通知模型在推理过程中响应角色的角色标签。 后面的内容表示模型需要遵循的指令&#xff0c;而 后面的内容传达了当前用户对模型的需求。 后面的内容代表模型的预期输出&#xff0c;也…

学习threejs,实现配合使用WebWorker

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️WebWorker web端多线程 二、…

16-03、JVM系列之:内存与垃圾回收篇(三)

JVM系列之&#xff1a;内存与垃圾回收篇(三) ##本篇内容概述&#xff1a; 1、执行引擎 2、StringTable 3、垃圾回收一、执行引擎 ##一、执行引擎概述 如果想让一个java程序运行起来&#xff0c;执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。 简…

正逆断层剪应力方向

正断层&#xff08;Normal Fault&#xff09;&#xff1a; 在正断层中&#xff0c;上盘相对于下盘向下滑动。由于正断层是由垂直拉伸应力引起的&#xff0c;因此&#xff0c;剪应力的方向实际上是指向下盘的&#xff0c;也就是说&#xff0c;剪应力的作用是沿断层面从上盘向下盘…

Android11.0系统关闭App所有通知

通过广播接收方式&#xff0c;根据包名关闭App所有通知。 packages/apps/Settings$ git diff diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d4c54c6ed8..1ce7d4136f 100644 --- a/AndroidManifest.xmlb/AndroidManifest.xml-106,6 106,7 <uses-permissio…

小程序 - 美食列表

小程序交互练习 - 美食列表小程序开发笔记 目录 美食列表 功能描述 准备工作 创建项目 配置页面 配置导航栏 启动本地服务器 页面初始数据 设置获取美食数据 设置onload函数 设置项目配置 页面渲染 页面样式 处理电话格式 创建处理电话格式脚本 页面引入脚本 …

Qt6.8 QGraphicsView鼠标坐标点偏差

ui文件拖放QGraphicsView&#xff0c;src文件定义QGraphicsScene赋值给图形视图。 this->scene new QGraphicsScene();ui.graph->setScene(this->scene);对graphicview过滤事件&#xff0c;只能在其viewport之后安装&#xff0c;否则不响应。 ui.graph->viewport…

springboot/ssm购物系统Java代码web项目在线购物商城电商源码

springboot/ssm购物系统Java代码web项目在线购物商城电商源码 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;m…

若依 ruoyi VUE el-select 直接获取 选择option 的 label和value

1、最新在研究若依这个项目&#xff0c;我使用的是前后端分离的方案&#xff0c;RuoYi-Vue-fast(后端) RuoYi-Vue-->ruoyi-ui(前端)。RuoYi-Vue-fast是单应用版本没有区分那么多的modules 自己开发起来很方便&#xff0c;这个项目运行起来很方便&#xff0c;但是需要自定义的…

基于队列(Queue)的部分笔试题

1. 设计一个循环队列&#xff08;环形队列&#xff09; 问题描述&#xff1a; 设计一个支持以下操作的队列&#xff1a; enqueue(int x)&#xff1a;将元素 x 添加到队尾。 dequeue()&#xff1a;移除并返回队头元素。 peek()&#xff1a;返回队头元素&#xff0c;但不移除它…

springboot事务手动回滚报错

捕捉异常之后手动标记回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 没有嵌套事务&#xff0c;还是报Transaction rolled back because it has been marked as rollback-only异常错误 查看错误堆栈&#xff0c;service调用的方法外层还套…

Pytorch使用手册- TorchVision目标检测微调Tutorial的使用指南(专题十二)

这篇教程的目标是对一个预训练的 Mask R-CNN 模型进行微调,应用于 Penn-Fudan 行人检测与分割数据集。该数据集包含 170 张图像,里面有 345 个行人实例,我们将通过这个教程来演示如何使用 torchvision 中的新特性,训练一个面向自定义数据集的目标检测和实例分割模型。 注意…