C++核心编程<引用>(2)
c++核心编程<引用>
- 2.引用
- 2.1引用的基本使用
- 2.2引用注意事项
- 2.3引用做函数参数
- 2.4引用做函数返回值
- 2.5引用的本质
- 2.6常量引用
2.引用
2.1引用的基本使用
- 作用: 给变量起别名
- 语法:
数据类型 &别名 = 原名 - 演示
#include<iostream> using namespace std; void func();int main() {func();system("pause");return 0; }void func() {int num = 10;cout << num << endl;// 10int& num2 = num;cout << num << endl;// 10cout << num2 << endl;// 10num2 = 12;cout << num << endl;// 12cout << num2 << endl;// 12 }
2.2引用注意事项
- 引用必须初始化
- 引用在初始化后,不可以改变
- 无论是操作别名,还是操作原名,都是操作同一块内存
#include<iostream>
using namespace std;int main()
{int num1 = 12;int num2 = 25;// 1.引用必须初始化// int # // 2.一旦初始化,就不可以更改(引用)int &num = num1; // 赋值操作,不是更改引用num = num2; cout << num << endl; // 25cout << num1 << endl; // 25cout << num2 << endl; // 25system("pause");return 0;
}
2.3引用做函数参数
- 函数传参时,可以利用引用的技术让形参修饰实参
- 可以简化指针修改实参
#include<iostream>
using namespace std;//交换函数
//1.值传递
void SwapNum(int a, int b);
//2.地址传递
void SwapAdd(int* a, int* b);
//3.引用传递
void SwapRef(int& a, int& b);int main() {int a = 10;int b = 20;SwapNum(a, b);// 值传递,形参不会修饰实参cout << "a = " << a << endl;// 10cout << "b = " << b << endl;// 20SwapAdd(&a, &b);// 地址传递,形参会修饰实参的cout << "a = " << a << endl;// 20cout << "b = " << b << endl;// 10SwapRef(a, b);// 引用传递,形参也会修饰实参的cout << "a = " << a << endl;// 10cout << "b = " << b << endl;// 20system("pause");return 0;
}void SwapNum(int a, int b) {// 形参发生改变int temp = a;a = b;b = temp;
}
void SwapAdd(int* a, int* b) {int temp = *a;*a = *b;*b = temp;
}
void SwapRef(int& a, int& b) {int temp = a;a = b;b = temp;
}
2.4引用做函数返回值
- 引用是可以作为函数的返回值存在的
- 不要返回局部变量引用
- 函数调用为左值
#include<iostream>
using namespace std;// 引用做函数的返回值
// 1.不要返回局部变量
int& test_1();// 2.函数的调用可以作为左值
int& test_2();int main() {int& ref = test_1();// 第一次操作的结果是正常的,是因为编译器做了保留cout << "ref = " << ref << endl; // 第二次结果错误,因为a的内存已经释放了cout << "ref = " << ref << endl;int& ref2 = test_2();cout << "ref2 = " << ref2 << endl; // 10cout << "ref2 = " << ref2 << endl; // 10cout << "ref2 = " << ref2 << endl; // 10//如果函数的返回值是引用,这个函数调用可以作为左值test_2() = 1000;cout << "ref2 = " << ref2 << endl; // 1000system("pause");return 0;
}int& test_1() {int a = 10;return a;
}int& test_2() {// 静态变量,存放在全局区,全局区上的数据在程序结束后释放static int a = 10;return a;
}
2.5引用的本质
- 本质: 引用的本质在C++内部实现是一个指针常量
#include<iostream>
using namespace std;
void func(int& ref);int main() {int a = 10;int& ref = a;ref = 20;cout << "a = " << a << endl; // 20cout << "ref = " << ref << endl; // 20func(a);cout << "ref = " << ref << endl; // 100system("pause");return 0;
}void func(int& ref) {ref = 100;
}
2.6常量引用
- 作用: 常量引用主要用来修饰形参,防止误操作
- 在函数形参列表中,可以加const修饰形参,防止形参改变实参
#include<iostream>
using namespace std;void showValue(int& value);int main() {// 常量引用// 使用场景: 用来修饰形参,防止误操作int a = 10;//int& ref = 10; //error,引用必须引一块合法的内存空间int& ref = a;// 加上const之后 编译器将代码修改, int temp = 10;const int& ref = temp;const int& ref2 = 10;// error, 加上const之后变为只读,不可修改// ref2 = 20;int num = 1000;showValue(num);system("pause");return 0;
}
void showValue(int& value) {cout << "value = " << value << endl; // 1000
}// 增加const的目的是为了让形参不被修改
void showValue(const int& value) {// value = 120;cout << "value = " << value << endl; // 1000
}
相关文章:
C++核心编程<引用>(2)
c核心编程<引用>2.引用2.1引用的基本使用2.2引用注意事项2.3引用做函数参数2.4引用做函数返回值2.5引用的本质2.6常量引用2.引用 2.1引用的基本使用 作用: 给变量起别名语法:数据类型 &别名 原名演示#include<iostream> using namespace std; void func();i…...
零入门kubernetes网络实战-20->golang编程syscall操作tun设备介绍
《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是使用golang自带的syscall包来创建tun类型的虚拟网络设备。 注意: 目前只能使用syscall包来创建tun类型的虚拟设备。 tun虚拟网…...
springboot之自动配置
文章目录前言一、配置文件及自动配置原理1、配置文件2、yaml1、注解注入方式给属性赋值2、yaml给实体类赋值3、Properties给属性赋值二、springboot的多环境配置四、自动配置总结前言 1、自动装配原理 2、多种方式给属性赋值 3、多环境配置 4、自动配置 一、配置文件及自动配置…...
wxpython设计GUI:wxFormBuilder工具常用布局结构介绍之布局四—面板拼接式
python借助wxFormBuilder工具搭建基础的GUI界面—wxFormBuilder工具使用介绍:https://blog.csdn.net/Logintern09/article/details/126685315 布局四:面板拼接式,先Panel面板构图,再使用程序代码在Frame框架上拼接面板 下面讲一下…...
全网最全之接口测试【加密解密攻防完整版】实战教程详解
看视频讲的更详细:https://www.bilibili.com/video/BV1zr4y1E7V5/? 一、对称加密 对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只有一个。发送和接收双方事先都知道加密的密钥,均使用这个密钥对数据进行加密和解…...
Python - 目录文件(OS模块) 常用操作
目录os模块的方法os.path()模块的方法使用示例示例一:简单使用示例二:获取文件夹下指定条件的文件os模块的方法 方法说明os.listdir(path)取得指定文件夹下的文件列表os.mkdir(path)创建一个名为path的文件夹os.open(file, flags)打开一个文件ÿ…...
把本地代码初始化到远程git仓库
本地代码,推送到远程的git仓库。第一种方法第一步:建立远程的git仓库第二步:拉取git仓库到本地第三步:将本地代码复制到本地的git拉下来的文件夹中第四步:代码提交即可git add . --> git commit -m 初始化 --> g…...
关于angular中的生命周期函数
生命周期函数,也叫生命周期钩子。 Angular的每个组件(包括根组件和子组件)都存在一个生命周期,从创建、更新、到销毁,Angular提供组件生命周期钩子函数, 组件的生命周期从实例化组件类并渲染组件视图及其…...
【拼图】拼图游戏-微信小程序开发流程详解
还记得小时候玩过的经典拼图游戏吗,上小学时,在路边摊用买个玩具,是一个正方形盒子形状,里面装的是图片分割成的很多块,还差一块,怎么描述好呢,和魔方玩具差不多,有没有听说叫二维的…...
第六章 opengl之光照(颜色)
OpenGL光照颜色创建一个光照场景光照 颜色 颜色由RGB组成,分别是红色,绿色,蓝色。举例定义一个颜色向量: glm::vec3 coral(1.0f, 0.5f, 0.31f);而在现实中,人眼看到的是 物体反射后的颜色,也就是说不能被…...
C语言-基础了解-19-C位域
C位域 一、C位域 如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下: struct {unsigned int widthValidated;unsigned int heightValidated; } status;这种结构需要 8 字节的内存空间,但在实际上,在每个变…...
MapReduce全排序和二次排序
排序是MapReduce框架中最重要的操作之一。MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要。默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。对于MapTask…...
【Vue3】封装数字框组件
数量选择组件-基本结构 (1)准备基本结构 <script lang"ts" setup name"Numbox"> // </script> <template><div class"numbox"><div class"label">数量</div><div cla…...
C++-简述strcpy、sprintf 和 memcpy 的区别
回答如下: strcpy 函数:用于将一个字符串(以 NULL 结尾)从源地址复制到目标地址。函数原型为 char* strcpy(char* destination, const char* source)。需要注意的是,该函数会复制整个字符串,包括 NULL 终止…...
用CPU大法忽悠ChatGPT写前端,油猴子工具库+1
文章目录用CPU大法忽悠ChatGPT写前端,油猴子工具库1源起对话1. 作为一名天才js程序员,开发一个油猴子脚本,实现所有浏览器网页的自动下滑功能,每一个步骤都加上中文注释2. 加一个按钮,只有我点击了按钮才会开始自动下滑…...
初识虚拟DOM渲染器
初识虚拟DOM渲染器什么是虚拟DOM什么是渲染器渲染器的实现组件是什么什么是虚拟DOM 首先简单说一下什么是虚拟DOM,虚拟DOM就是一个描述真实DOM的JS对象 例如: 真实的DOM元素 <div onClick"alert(click me)">click me</div>可以…...
工作日志day03
同时构建静态和动态库 //如果用这种方式,只会构建一个动态库,虽然静态库的后缀是.a ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC}) //修改静态库的名字,这样是可以的,但是我们往往希望他…...
【数据挖掘与商务智能分析】第三章 线性回归模型
一元线性回归 一元线性回归的代码实现 1. 绘制散点图 import matplotlib.pyplot as plt X = [[1], [2], [4], [5]] Y...
iOS开发之UIStackView基本运用
UIStackView UIStackView是基于自动布局AutoLayout,创建可以动态适应设备方向、屏幕尺寸和可用空间的任何变化的用户界面。UIStackView管理其ArrangedSubview属性中所有视图的布局。这些视图根据它们在数组中的顺序沿堆栈视图的轴排列。由axis, distribution, align…...
【java】为什么 main 方法是 public static void ?
main 方法是我们学习Java编程语言时知道的第一个方法,你是否曾经想过为什么 main 方法是 public、static、void 的。当然,很多人首先学的是C和C,但是在Java中main方法与前者有些细微的不同,它不会返回任何值,为什么 ma…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...
