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

C++训练营:引用传递

大家好:

        衷心希望各位点赞。

        您的问题请留在评论区,我会及时回答。 

一、引用传递

        简单来说,“引用”就是给已有的变量起一个别名。引用并没有自己单独的内存空间,作为引用,它和原变量共用一段内存空间。引用的定义格式如下:

类型        &引用名 = 已有的变量名;

例如:

int a = 10;
int& b = a;

        先定义了一个变量 a ,然后又定义了一个引用 b ,通过赋值语句使 b 是变量 a 的别名。此时,引用 b 与变量 a 在内存中占用同一快内存空间。

        定义引用的同时必须对其进行初始化,也就是必须指定该引用是哪个变量的别名,而且一旦初始化,引用就不能再是其他变量的别名。引用的使用和一般变量的使用是一样的,它只是变量的一个别名。

二、应用

        在定义函数时,如果形参被定义为引用,那么调用函数时,实参必须是变量,不能是字面值常量,此时形参就是实参的别名。引用传递的特点是:

1、形参是实参的别名,形参和实参共用同一块内存空间。

2、对形参的修改也就是对实参的修改,二者相互影响,实现了双向传递。

常见应用:按照引用传递的方式交换两个变量的值。程序如下:

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;void swap(int& x, int& y);//将形参定义为引用int main() {int a = 1;int b = 2;cout << "a = " << a << endl;//输出a = 1cout << "b = " << b << endl;//输出b = 2cout << "-----引用传递-----" << endl;swap(a, b);cout << "a = " << a << endl;cout << "b = " << b << endl;system("pause");return 0;
}void swap(int& x, int& y) {int temp;temp = x;x = y;y = temp;
}

        程序运行的结果,如图所示:

         调用 swap() 函数交换两个引用 x , y 的值以后,实参变量 a 和 b 的值也交换了。这是因为,引用x , y 是实参变量 a ,b 的别名,a 和 x 共用同一块内存空间,b 和 y 共用同一块内存空间。

相关文章:

  • 计算机服务器中了devos勒索病毒怎么解密,devos勒索病毒解密工具流程
  • 【计算机网络教程】第一章课后习题答案
  • Websocket在Asp.net webApi(.net framework)上的应用
  • JAVA后端开发面试基础知识(九)——SpringBoot
  • 机器学习模型—逻辑回归
  • Win11系统启动VMware上虚拟机蓝屏解决办法
  • 十步打造JAVA应用服务器
  • go docker sdk 使用 第二章
  • ubuntu 23.04 安装 中文输入法
  • Unity3d Shader篇(十四)— 卡通着色
  • GPT与R 在生态环境领域数据统计分析
  • python中的排序函数用法:A.sort(key=lambda x: abs(x), reverse=True)
  • 力扣654. 最大二叉树
  • IOS降级后从高版本到低版本恢复备份
  • elasticsearch(学习笔记)(分布式搜索引擎)(黑马)(kibana操作)
  • [NodeJS] 关于Buffer
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【知识碎片】第三方登录弹窗效果
  • Android Studio:GIT提交项目到远程仓库
  • canvas 五子棋游戏
  • CODING 缺陷管理功能正式开始公测
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • extract-text-webpack-plugin用法
  • leetcode46 Permutation 排列组合
  • session共享问题解决方案
  • socket.io+express实现聊天室的思考(三)
  • SpingCloudBus整合RabbitMQ
  • SQLServer之创建数据库快照
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 闭包--闭包作用之保存(一)
  • 第十八天-企业应用架构模式-基本模式
  • 给Prometheus造假数据的方法
  • 力扣(LeetCode)965
  • 利用DataURL技术在网页上显示图片
  • 聊聊flink的TableFactory
  • 说说动画卡顿的解决方案
  • Java性能优化之JVM GC(垃圾回收机制)
  • 第二十章:异步和文件I/O.(二十三)
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 数据库巡检项
  • ​MySQL主从复制一致性检测
  • #FPGA(基础知识)
  • #pragma 指令
  • (175)FPGA门控时钟技术
  • (8)STL算法之替换
  • (Python第六天)文件处理
  • (二)linux使用docker容器运行mysql
  • (四)图像的%2线性拉伸
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 服务 ServiceController
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET与 java通用的3DES加密解密方法
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示