C++核心编程02——引用

摘录于B站黑马程序员提供的笔记。 

1. 引用的基本使用

作用: 给变量起别名

语法: 数据类型 &别名 = 原名

实例:

#include <iostream>
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;
}

 

2. 引用注意事项

  • 引用必须初始化

  • 引用在初始化后,不可以改变

 

实例:

#include <iostream>
using namespace std;int main() {int a = 10;int b = 20;//int &c; //错误,引用必须初始化,这里没有对&c进行初始化int &c = a; //一旦初始化后,就不可以更改c = b; //这是赋值操作,不是更改引用cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;system("pause");return 0;
}

 

3. 引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

形参是否可修饰实参,其实就是问在main或者其他函数A中调用带形参的函数B,调用后是否会改变实参在函数A中的值。

优点:可以简化指针修改实参

示例:

#include <iostream>
using namespace std;// 实现交换函数//1. 值传递
void mySwap01(int a, int b) {int temp = a;a = b;b = temp;cout << "值传递代码中:" << "a = " << a << " b = " << b << endl;
}//2. 地址传递
void mySwap02(int* a, int* b) {int temp = *a;*a = *b;*b = temp;cout << "地址传递代码中:" << "a = " << *a << " b = " << *b << endl;
}//3. 引用传递
void mySwap03(int& b, int& a) {int temp = a;a = b;b = temp;cout << "引用传递代码中:" << "a = " << a << " b = " << b << endl;
}int main() {int a = 10;int b = 20;cout << "main中的初始化:" << "a:" << a << " b:" << b << endl;mySwap01(a, b);// 值传递,main函数中a,b的值不会改变,还是和如上初始化的一样。即a =10,b=20 (形参不会修饰实参)cout <<"值传递main:"<< "a:" << a << " b:" << b << endl;  mySwap02(&a, &b);// 地址传递,main函数中a,b的值会改变(形参会修饰实参)cout << "地址传递main:" << "a:" << a << " b:" << b << endl;mySwap03(a, b);// cout << "引用传递main:" << "a:" << a << " b:" << b << endl;system("pause");return 0;
}

总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单  

 

4 引用做函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

实例:

//返回局部变量引用
int& test01() {int a = 10; //局部变量return a;
}//返回静态变量引用
int& test02() {static int a = 20;return a;
}int main() {//不能返回局部变量的引用int& ref = test01();cout << "ref = " << ref << endl; cout << "ref = " << ref << endl;//如果函数做左值,那么必须返回引用int& ref2 = test02();cout << "ref2 = " << ref2 << endl;cout << "ref2 = " << ref2 << endl;test02() = 1000;cout << "ref2 = " << ref2 << endl;cout << "ref2 = " << ref2 << endl;system("pause");return 0;
}

5. 引用的本质

本质:引用的本质在c++内部实现是一个指针常量.

讲解示例:

//发现是引用,转换为 int* const ref = &a;
void func(int& ref){ref = 100; // ref是引用,转换为*ref = 100
}
int main(){int a = 10;//自动转换为 int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改int& ref = a; ref = 20; //内部发现ref是引用,自动帮我们转换为: *ref = 20;cout << "a:" << a << endl;cout << "ref:" << ref << endl;func(a);return 0;
}

结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了 。

6 常量引用

作用:常量引用主要用来修饰形参,防止误操作

在函数形参列表中,可以加==const修饰形参==,防止形参改变实参

示例: 

//引用使用的场景,通常用来修饰形参
void showValue(const int& v) {//v += 10;cout << v << endl;
}int main() {//int& ref = 10;  引用本身需要一个合法的内存空间,因此这行错误//加入const就可以了,编译器优化代码,int temp = 10; const int &ref = temp;// int &ref = 10; // 这样写是非法的,因为引用必须引一块合法的内存空间;const int& ref = 10;//ref = 100;  //加入const后不可以修改变量,此时只是只读状态cout << ref << endl;//函数中利用常量引用防止误操作修改实参int a = 10;showValue(a); // 调用的函数void showValue(const int& v),const int& v表示用引用接收参数system("pause");return 0;
}

 

 

 

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

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

相关文章

2024年8月28日(docker网络)

跨主机的容器网络连接 A>mysql B>java容器 将A -p3306:3306 端口映射就可以实现 一、docker网络 1、本地网络 bridge 所有容器连接到桥就可以使用外网,使用nat让容器可以访问外网,使用ip a s指令查看桥,所有容器连接到此桥,ip地址都是172.17.0.0/16网段,桥是启动…

ESP8266通过WiFiManager实现Web配网

背景 一个项目中使用到了一款压力传感器,需要通过单片机实现数据的采集并发送到远程的服务器上,单片机采用的时ESP8266,通过WiFiManager实现局域网配置,以及远端服务器IP地址和服务端口的配置。发布此文章记录一下使用WiFiManager实现配网的方法。 程序流程图 示例代码 …

【机器学习-监督学习】双线性模型

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

[HZNUCTF 2023 preliminary]flask

[HZNUCTF 2023 preliminary]flask 点开之后页面如图所示&#xff1a; 猜测是SSTI模板注入&#xff0c;先输入{7*7},发现模板是倒序输入的&#xff1a; 然后我们输入}}‘7’*7{{返回777777&#xff0c;这是jinja2模板&#xff1a; 我们需要让用户输入一个字符串&#xff0c;对其…

VS2022 QT环境显示中文乱码问题

1.问题描述 在VS2022中搭配QT6.2环境&#xff0c;在文本处设置中文&#xff0c;运行程序文本处显示乱码&#xff0c;未成功显示想要的中文。 2.VS2015解决方案 如果是VS2015的话&#xff0c;直接文件->高级保存选项可以设置编码格式。 修改编码格式如图所示&#xff1a;…

C语言迷宫制造

目录 开头程序程序的流程图程序的效果我推荐要制造的迷宫下一篇博客要讲的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> void printmaze(const cha…

基于多案例全流程防洪评价报告编制方法与水流数学模型建模

《防洪评价报告编制导则解读河道管理范围内建设项目编制导则》&#xff08;SL/T808- 2021&#xff09;解读 编制导则解读 1.规范适用范围&#xff1b; 2.规范名词概念解读&#xff1b; 3.防洪评价计算类别及分析主要内容&#xff1b; 4.消除和减轻影响措施&#xff1b; 5.…

使用 pg_profile 在 Postgres 中生成性能报告

使用 pg_profile 在 Postgres 中生成性能报告 下载安装 pg_profile 从github链接下载pg_profile: https://github.com/zubkov-andrei/pg_profile/releases 解压缩到以下位置 # cd $PGHOME/share/extension/ # su - postgress $ psql -h 127.0.0.1 -d postgres -U postgress p…

Improving Language Understandingby Generative Pre-Training

摘要 自然语言理解包括各种各样的任务&#xff0c;如文本蕴涵、问题回答、语义相似性评估和文档分类。尽管大量未标记的文本语料库丰富&#xff0c;但用于学习这些特定任务的标记数据很少&#xff0c;这使得判别训练模型难以充分执行。我们证明&#xff0c;通过在不同的未标记…

筛质数(线性筛法)

线性筛法&#xff1a; 假设有一个非质数 x&#xff0c;那么这个数可以被表示为一个最小质因数和一个因子相乘的形式 如 x 12 &#xff0c;那么 x 2*6 其中&#xff1a;2 就是 12 的最小质因数&#xff0c; 6 就是另一个因子 线性筛法就是利用每个数的最小质因数筛掉这个非…

解决idea始终无法导入本地jar包

问题描述 maven刷新也没有用 解决&#xff1a; 找到本地Maven仓库的jar包手动引入 之后。导入成功

《黑神话:悟空》研发公司的薪资水平

作者&#xff1a;程序员晓凡 最近全网最火爆的要属《黑神话&#xff1a;悟空》了&#xff0c;即便是我这个平时不沾游戏、不追直播的人&#xff0c;也看直播看得津津有味。 一、销量与热度背后 首先&#xff0c;让我们来看看那些令人瞩目的数字。《黑神话&#xff1a;悟空》…

VBA技术资料MF194:屏蔽右键菜单

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

uniapp(微信小程序如何使用单选框、复选框)

一、先看效果 二、数据结构 说明&#xff1a;selected用来记录每次用户选择的值&#xff0c;当是单选的时候属性中的selected属性需要设置成字符串&#xff0c;当是复选框的时候&#xff0c;此时选择的是数组&#xff0c;selected属性应设置为数组。type用来区分当前是单选还是…

Wordpress 6.x 修改文件上传大小限制

1. 安装并启用Big File Uploads插件 插件 → 安装新插件 媒体→添加文件 修改后Save保存 2. 修改Nginx配置文件 # 我的配置在wordpress.conf文件中 vim /etc/nginx/conf.d/wordpress.conf 在server节点中加入下面这句配置 # 文件上传大小限制 client_max_body_size 500M;# 重…

xss-labs通关攻略 11-15关

第十一关&#xff1a;less-11 步骤一&#xff1a;利用burp抓包 步骤二&#xff1a;添加referer:click me!" type"button" οnmοuseοver"alert(/xss/)进行放包 第十二关&#xff1a;less-12 步骤一&#xff1a;利用burp抓包 步骤二&#xff1a;修改User A…

java 中的设计模式

文章目录 一、前言二、设计模式的分类三、设计模式的原则1、开闭原则&#xff08;Open Close Principle&#xff09;2、里氏代换原则&#xff08;Liskov Substitution Principle&#xff09;3、依赖倒转原则&#xff08;Dependence Inversion Principle&#xff09;4、接口隔离…

【计算机系统架构】从0开始构建一台现代计算机|时序逻辑、主存储器|第2章

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a; 【计算机系统架构】从0开始构建一台现代计算机|二进制、布尔运算和ALU|第2章每日一言&#x1f33c;: 孤独和喧嚣都令人难以忍受。如果一定要忍…

参会投稿 | 第三届先进传感与智能制造国际学术会议(ASIM 2024)

第三届先进传感与智能制造国际会议&#xff08;The 3rd International Conference on Advanced Sensing, Intelligent Manufacturing&#xff09;&#xff0c;由江汉大学、西安交通大学和山东大学主办&#xff0c;由江西省机械工程学会、东华理工大学机械与电子工程学院等联合协…

iPhone突然黑屏?别慌,这里有你的自救指南

在日常使用iPhone的过程中&#xff0c;不少用户可能会遇到手机突然黑屏的情况&#xff0c;这往往让人措手不及。别担心&#xff0c;今天我们就来详细探讨一下iPhone突然黑屏的可能原因及解决方法&#xff0c;帮助你快速恢复手机的正常使用。 一、iPhone突然黑屏的可能原因 1. …