十一、C++核心编程(2)引用
一、引用的基本使用
作用: 给变量起别名
语法:
数据类型 &别名 = 原名
#include<iostream>
#include<string.h>
using namespace std;int main()
{//引用基本语法//数据类型 &别名 = 原名int a = 10;//创建引用int &b = a;cout << "a = " << a << endl;cout << "b = " << b << endl;b = 100;cout << "a = " << a << endl;cout << "b = " << b << endl;system("pause");return 0;
}
运行结果:
a = 10
b = 10
a = 100
b = 100
说明a和b访问的是同一个内存空间
二、引用注意事项
- 引用必须初始化
- 引用在初始化后,不可以改变
#include"head.h"int main()
{int a = 10;//1、引用必须初始化// int &b; // 错误,必须要初始化int& b = a;//2、引用在初始化后,不可以改变int c = 20;b = c; //赋值操作,而不是更改引用cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;system("pause");return 0;
}
运行结果:
a = 20
b = 20
c = 20
三、引用做函数参数
作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参
#include<iostream>
using namespace std;//交换函数//1、值传递
void mySwap0l(int a, int b)
{int temp = a;a = b;b = temp;cout << "Swap0l a = " << a << endl;cout << "Swap0l b = " << b << endl;
}//2、地址传递
void mySwap02(int *a, int* b)
{int temp = *a;*a = *b;*b = temp;cout << "Swap02 *a = " << *a << endl;cout << "Swap02 *b = " << *b << endl;
}//3、引用传递
void mySwap03(int &a, int &b) //&a,&b相当于main函数中的a和b的别名
{int temp = a;a = b;b = temp;cout << "Swap03 a = " << a << endl;cout << "Swap03 b = " << b << endl;
}int main()
{int a = 10;int b = 20;mySwap0l(a, b); //值传递,形参不会改变实参的值cout << "a = " << a << endl;cout << "b = " << b << endl;cout << endl;mySwap02(&a, &b); //地址传递,形参会改变实参的值cout << "a = " << a << endl;cout << "b = " << b << endl;cout << endl;mySwap03(a, b); //引用传递,形参会改变实参的值cout << "a = " << a << endl;cout << "b = " << b << endl;system("pause");return 0;
}
运行结果:
Swap0l a = 20
Swap0l b = 10
a = 10
b = 20Swap02 *a = 20
Swap02 *b = 10
a = 20
b = 10Swap03 a = 20
Swap03 b = 10
a = 20
b = 10
总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单
四、引用做函数返回值
作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用作为左值
#include<iostream>
#include<string.h>
using namespace std;//引用做函数的返回值
//1、不要返回局部变量的引用
int & test01()
{int a = 10; //局部变量存放在四区中的,栈区return a;
}//2、函数的调用可以作为左值
int & test02()
{static int a = 10; //静态变量存放在全局区,全局区上的数据在程序结束后系统释放return a;
}int main()
{int& ref = test01();cout << "ref=" << ref << endl; //第一次结果正确,是因为编译器做了保留cout << "ref=" << ref << endl; //第二次结果错误,因为a的内存已经释放int &ref2 = test02();cout << "ref2=" << ref2 << endl;cout << "ref2=" << ref2 << endl;test02() = 1000; //如果函数的返回值是引用,这个函数调用可以作为左值//相当于让a=1000cout << "ref2=" << ref2 << endl;//ref相当于a的别名cout << "ref2=" << ref2 << endl;system("pause");return 0;
}
运行结果:
ref=10
ref=1503692912
ref2=10
ref2=10
ref2=1000
ref2=1000
五、引用的本质
本质:引用的本质在c++内部实现是一个指针常量
六、常量引用
作用:常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参防止形参改变实参
#include<iostream>
#include<string.h>
using namespace std;//打印数据函数
void showValue(int &val)
//若void showValue(const int &val)则函数体中不可修改val=1000
{val = 1000; //修改a为1000cout << "val = " << val << endl;
}int main()
{//常量引用//使用场景:用来修饰形参,防止误操作//int a = 10;//加上const之后 编译器将代码修改int temp = 10; const int& ref = temp;//const int& ref = 10; //引用必须引一块合法的内存空间//ref = 20; //加入const之后变为只读,不可以修改int a = 100;showValue(a);cout << "a = " << a << endl;system("pause");return 0;
}
运行结果:
val = 1000
a = 1000
相关文章:
十一、C++核心编程(2)引用
一、引用的基本使用 作用: 给变量起别名语法: 数据类型 &别名 原名 #include<iostream> #include<string.h> using namespace std;int main() {//引用基本语法//数据类型 &别名 原名int a 10;//创建引用int &b a;cout << "a "…...
numpy学习总结二
单词发音: squeeze 发音:死贵子 concatenation [kɒnˌktəˈneɪʃən] 拼接;串联 threshold [θreʃhəʊld] 死re后的 quantile 拷n太哦 分位数 因果不能改 智慧不能赐 正法不可说 无缘不能度 天雨虽宽不润无根之草;佛法虽广不度无缘之人 …...
3 编辑器(Vim)
1.完成 vimtutor。备注:它在一个 80x24(80 列,24 行) 终端窗口看起来效果最好。 2.下载我们提供的 vimrc,然后把它保存到 ~/.vimrc。 通读这个注释详细的文件 (用 Vim!), 然后观察 …...
C/C++ (stdio.h)标准库详解
cstdio,在C语言中称为stdio.h。该库使用所谓的流与物理设备(如键盘、打印机、终端)或系统支持的任何其他类型的文件一起操作。 在本文将会通过介绍函数参数,举出实际的简单例子来帮助大家快速上手使用函数。 目录 一、流 二、库函数 1、F…...
深度学习介绍
对于具备完善业务逻辑的任务,大多数情况下,正常的人都可以给出一个符合业务逻辑的应用程序。但是对于一些包含超过人类所能考虑到的逻辑的任务,例如面对如下任务: 编写一个应用程序,接受地理信息、卫星图像和一些历史…...
ywtool dhcp命令
一.dhcp功能介绍 就是通过脚本实现dhcp地址池的增、删、改、查这几个功能日志文件路径: /var/log/ywtools/ywtool-dhcp.log/usr/local/ywtools/config/config.ini中account参数(ywtool dhcp这个命令用的,但是这个命令只能配置1个地址池,所以这里面的参数没什么意义) 二.配置…...
ChatGPT高效提问—基础知识(LM、PLM以及LLM)
ChatGPT高效提问—基础知识(LM、PLM以及LLM) 了解语言模型(language model, LM)、预训练语言模型(pre-trained language model, PLM)和大型语言模型(large language model, LLM)…...
MongoDB复制集实战及原理分析
文章目录 MongoDB复制集复制集架构三节点复制集模式PSS模式(官方推荐模式)PSA模式 典型三节点复制集环境搭建复制集注意事项环境准备配置复制集复制集状态查询使用mtools创建复制集安全认证复制集连接方式 复制集成员角色属性一:Priority 0属…...
Java并发之synchronized详解
☆* o(≧▽≦)o *☆嗨~我是小奥🍹 📄📄📄个人博客:小奥的博客 📄📄📄CSDN:个人CSDN 📙📙📙Github:传送门 📅&a…...
Flask 项目自动生成 API 文档的高效实践
Flasgger,作为一款强大的 Flask 扩展,自动从 Flask 应用中提取并生成 OpenAPI 规范文档,配备 SwaggerUI,为开发者提供了一条快捷通道,让 API 的文档编制和交互式测试变得简单易行。Flasgger 的设计原则是简化开发流程&…...
WebChat——一个开源的聊天应用
Web Chat 是开源的聊天系统,支持一键免费部署私人Chat网页的应用程序。 开源地址:https://github.com/loks666/webchat 目录树 TOC 👋🏻 开始使用 & 交流🛳 开箱即用 A 使用 Docker 部署B 使用 Docker-compose…...
【Linux系统 01】Vim工具
目录 一、Vim概述 1. 文件打开方式 2. 模式切换 二、命令模式 1. 移动与跳转 2. 复制与粘贴 3. 剪切与撤销 三、编辑模式 1. 插入 2. 替换 四、末行模式 1. 保存与退出 2. 查找与替换 3. 分屏显示 4. 命令执行 一、Vim概述 1. 文件打开方式 vim 文件路径&#…...
Oracle 面试题 | 09.精选Oracle高频面试题
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
基于Springboot的校园失物招领网站(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的校园失物招领网站(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…...
WPF布局面板
StackPanel StackPanel 是一种常用的布局控件,可以支持水平或垂直排列,但不会换行。当子元素添加到 StackPanel 中时,它们将按照添加的顺序依次排列。默认情况下,StackPanel 的排列方向是垂直的,即子元素将从上到下依次排列。可以使用 Orientation 属性更改排列方向。可以…...
灵活应对:策略模式在软件设计中的应用
策略模式是一种行为型设计模式,它允许定义一系列算法,并将每个算法封装起来,使它们可以互换使用。策略模式让算法的变化独立于使用算法的客户端,使得在不修改原有代码的情况下切换或扩展新的算法成为可能。 使用策略模式的场景包…...
eosio.token 智能合约介绍
一、目的 eosio.token系统合约定义了允许用户为基于EOSIO的区块链创建、发行和管理代币的结构和操作,它演示了一种实现允许创建和管理代币的智能合约的方法。本文详细介绍了eosio.token系统合约并在本地测试链上实际发行了代币进行演示,适用于EOS智能合…...
3D 转换
1,3D的特点: 近小远大 物体后面遮挡不可见 2,3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向 transform:translateX(100px):仅仅是在x轴上移动…...
AI智能语音机器人安装方法
销售型的企业,基本靠电话营销拓客来实现效益的最大化。因为电销人员离职率高,且需求量大,需要接连不断的招人来实现业绩目标,电话机器人,贴牌招商,复制多个账户 这些都意味的企业的投入成本越来越大,博主从事多年AI技术…...
Python 潮流周刊#38:Django + Next.js 构建全栈项目
△△请给“Python猫”加星标 ,以免错过文章推送 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯,…...
安全是跑出来的:从萝卜快跑看自动驾驶的“成人礼”
近日,武汉市区部分“萝卜快跑”自动驾驶车辆出现突发停驶异常状况,部分车辆在道路上停止运行,导致乘客被困、交通受阻。官方通报显示,此次事件为系统故障触发的车辆停滞,所有乘客已安全撤离,无人员伤亡。作…...
Claude Code /buddy 命令失效了?教你一招绕过限制,直接解锁金色传说!
最近升级到 Claude Code > v2.1.90 的小伙伴可能发现,输入 /buddy 命令后只会提示: buddy is unavailable on this configuration GitHub 上的 issue 也有相关讨论,官方把这个命令禁用了。那刚安装或升级的用户就没法体验 buddy 了吗&…...
3大阶段×50个项目:Android Kotlin实战的能力跃迁指南
3大阶段50个项目:Android Kotlin实战的能力跃迁指南 【免费下载链接】50-android-kotlin-projects-in-100-days My everyday Android practice demos with Kotlin in 100 days. 项目地址: https://gitcode.com/gh_mirrors/50/50-android-kotlin-projects-in-100-d…...
AdGuard浏览器扩展终极指南:3步打造无广告浏览体验
AdGuard浏览器扩展终极指南:3步打造无广告浏览体验 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension 你是否厌倦了网页上无处不在的广告弹窗?是否担心…...
RexUniNLU GPU推理优化教程:batch_size与max_length调优实测
RexUniNLU GPU推理优化教程:batch_size与max_length调优实测 1. 引言 如果你正在使用RexUniNLU处理大量文本数据,可能会遇到这样的问题:单条推理速度还行,但批量处理时总觉得不够快,GPU利用率也上不去。或者…...
全自动洗衣机组态王与三菱PLC联机及仿真探索
全自动洗衣机组态王6.53,6.60和三菱PLC联机和仿真程序包最近在研究自动化控制领域相关内容,接触到了全自动洗衣机组态王 6.53、6.60 与三菱 PLC 的联机以及仿真程序包,感觉很有意思,今天就来和大家分享分享。 一、组态王与三菱 PLC 联机的意义…...
告别回调地狱:PromiseKit函数式三剑客拯救异步代码
告别回调地狱:PromiseKit函数式三剑客拯救异步代码 【免费下载链接】PromiseKit Promises for Swift & ObjC. 项目地址: https://gitcode.com/gh_mirrors/pr/PromiseKit PromiseKit 是 Swift 和 Objective-C 开发者的异步编程救星,它通过优雅…...
dumper.js性能优化:大型对象检查的10个实用技巧
dumper.js性能优化:大型对象检查的10个实用技巧 【免费下载链接】dumper.js A better and pretty variable inspector for your Node.js applications 项目地址: https://gitcode.com/gh_mirrors/du/dumper.js dumper.js是一款为Node.js应用打造的变量检查工…...
内网渗透零基础入门教程!小白也能轻松搞懂内网渗透基础知识点
内网渗透初探 | 小白简单学习内网渗透 0x01 基础知识 内网渗透,从字面上理解便是对目标服务器所在内网进行渗透并最终获取域控权限的一种渗透。内网渗透的前提需要获取一个Webshell,可以是低权限的Webshell,因为可以通过提权获取高权限。 …...
Windows效率翻倍!这些隐藏的Win+R命令和CMD技巧你用过几个?
Windows效率革命:解锁WinR与CMD的终极生产力指南 你是否曾在同事飞速敲击键盘时暗自惊叹?那些看似简单的组合键背后,藏着Windows系统最强大的效率武器库。今天我们要探索的不仅是快捷键列表,而是一套完整的生产力操作系统——从Wi…...
