C++入门基础(三)

目录

  • 引用
    • 引用概念
    • 例子1
    • 例子2
    • 例子3
    • 例子4
    • 常引用
      • 拓展

引用

引用概念

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空
间,它和它引用的变量共用同一块内存空间。
在这里插入图片描述

比如:同学A有一个别名为张三,张三是同学A,张三和同学A指的都是同一个人,在C++中同学A可能是int类型,也可能是char类型,甚至可能是int*类型或int**类型…

因为引用的符号和去地址符号是相同的,就像之前的左移操作符和流插入一样,所以C++是可以同时支持取地址和引用的

例子1

#include<iostream>
using namespace std;
int main()
{int a = 0;int& b = a;cout << &b << endl;cout << b << endl;
}

在这里插入图片描述

这段代码中&b=a表示b是a的别名,打印的时候
cout<<&b<<endl表示打印a别名的地址
cout<<b<<endl则表示打印a的别名
注意:引用类型必须和引用实体是同种类型的

b既然是a的别名,b的地址也应该和a的地址一样(因为都表示的是同一个人)
在这里插入图片描述

那如果更改b的值,a的值是否又会更改呢?

在这里插入图片描述

显然是可以的,因为b就是a,只是换了个名字而已

例子2

别名是可以无限取的,就跟一个人的外号一样,不一定只有一个外号,同时也可以给一个人的外号取别名,比如同学B叫同学A为张三,同学C叫同学A为张四,有时同学C也爱叫张四为张五

	int main(){int a = 0;int& b = a;int& c = b;int& d = a;cout << a << endl;cout << b << endl;cout << c << endl;cout << d << endl;return 0;}

在这里插入图片描述

例子3

对一个人取外号,这个人必须是存在的,所以引用在定义时必须初始化

在这里插入图片描述
如果我们写int &a=0,这样会被认为a是一个地址
在这里插入图片描述

例子4

一个变量可以有多个别名,而一个别名是不可以是多个变量的

	int main(){int a = 0;int c = 1;int& b=a;int& b = c;return 0;}

在这里插入图片描述
再来看看下面这段代码

	int main(){int a = 0;int& b = a;int c = 2;b = c;cout << b << endl;cout << a << endl;return 0;}

在这里插入图片描述

这里的b并不是c的别名,之前是 int& b = c,这里是b=c,只是将c对值赋值给b,但是b不是c的别名

常引用

常引用的出现是为了解决当引用作为参数传参时被修改的情况

void func(int& x)
{x++;
}
int main()
{int a = 0;int& b = a;b++;cout << a << endl;func(a);cout << a << endl;
}

这里的b作为a的别名,通过引用传参传进func函数中,func函数的x也是a的别名,所以x++,影响到了函数外的a
在这里插入图片描述
为了解决这种情况,可以用const去修饰
在这里插入图片描述
const修饰使参数的权限变小,让x不能被修改,但是可以给其他变量赋值
在这里插入图片描述
下面三张图也是因为const修饰引起的权限问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

coust修饰的int对象可以和其他coust修饰的int对象相加,因为权限都相同
在这里插入图片描述
所以可以得出结论,权限是不能放大的
比如下面的代码,我们对a进行const修饰,然后将a通过引用传参传给func函数中,最后会报错

void func( int& x)
{;
}
int main()
{const int a= 1;func(a);}

在这里插入图片描述
而当我们对func函数中的x用const修饰后就可以正常运行了,这是因为xa是被const修饰的,所以是不可以被更改的,而x作为a的别名理应也不可以被修改,但是x没有被const修饰,导致权限放大,所以才会报错
在这里插入图片描述

拓展

我们知道double类型传给int类型的时候会出现数据丢失,当我们用int类型的ri作为d的别名是会报错
在这里插入图片描述
但是当在int &ri前加const修饰后却可以正常运行
在这里插入图片描述
这里就需要知道类型转换的时候会产生临时变量,也就是说并不是d直接赋值给ri,而是通过d构造出一个int类型的临时变量
所以这里的ri是临时变量的别名,而我们知道临时变量是具有常性的,在没有const修饰的情况下是出现了权限放大,导致出错,而加上了const修饰后权限就相等了,所以没有报错
在这里插入图片描述
那为什么要产生临时变量呢?

int main()
{int i = 97;char ch = 'a';if (i == ch){cout << "i=ch" << endl;}}

当操作符两边的操作数类型不相等时会出现类型提升或者截断,像上边的const int&ri=d是将d整形的部分截断给临时变量,然后ri再去拷贝临时变量

而这里的char ch = 'a’是类型的提升,因为ch只占1个字节,而i是整形占4个字节,所以临时变量会占4个字节,将ch给临时变量,然后临时变量按类型提升的规则,最高位往上补0,最后ch的ASCLL码值和i相同,所以打印出i=ch
在这里插入图片描述

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

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

相关文章

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

VCS:三步法的仿真流程

相关阅读 VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html 使用三步流程仿真设计涉及三个基本步骤&#xff1a; 分析(Analysis)展开(Elaboration)仿真(Simulation) VCS使用这三个步骤编译任何设计&#xff0c;无论所使用源代码的是HDL、HVL或其他支持的技术…

万字长文解读深度学习——Transformer

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;初识Transformer1. 编码器-解码器架构解码器的额外结构 2. 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;解码器中的注意力机制的2点特殊 3. 位置编码&#xff08;Positional Encoding&#xff09;4.…

花指令例子

如图所示&#xff1a; 指令EB FF的汇编代码为jmp -1&#xff0c;CPU执行到地址处0x6c80c0的指令EB FF时(jmp -1)&#xff0c;EIP为6c80c2, 执行后&#xff0c;EIP为0x6c80c1。但是反汇编器无法自动识别该指令。

校园周边美食探索及分享平台

摘要&#xff1a; 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的美食业进而也面临着巨大的挑战&#xff0…

CSS高级技巧_精灵图_字体图标_CSS三角_vertical-align(图像和文字居中在同一行)_溢出文字省略号显示

目录 CSS高级技巧 1. 精灵图 1.1 为什么需要精灵图 1.2 精灵图&#xff08;sprites&#xff09;的使用 1.2 精灵图的使用 案例&#xff1a;拼出自己名字 2. 字体图标 2.1 字体图标的产生 2.2 字体图标的优点 2.3 字体图标的下载 2.4 字体图标的引入 2.4.1 字体文件格…

SpringBoot框架在资产管理中的应用

3系统分析 3.1可行性分析 通过对本企业资产管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业资产管理系统采用Spring Boot框架&#xff0c;JAVA作…

停车场微信小程序的设计与实现(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了停车场微信小程序的开发全过程。通过分析停车场微信小程序管理的不足&#xff0c;创建了一个计算机管理停车场微信小程序的方案。文章介绍了停车场微信小程序的…

CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳

2024年11月9日至10日&#xff0c;以“湾区聚力 开源启智”为主题的2024年中国计算机学会中国开源大会&#xff08;CCF ChinaOSC&#xff09;将在深圳召开。大会将汇聚国内外学术界、顶尖科技企业、科研机构及开源社区的精英力量&#xff0c;共同探索人工智能技术和人类智慧的无…

「C/C++」C++ STL容器库 之 std::map 键值容器类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

Oracle简介、环境搭建和基础DML语句

第一章 ORACLE 简介 1.1 什么是 ORACLE ORACLE数据库系统是美国ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器体系结构的数据库之一。 英文官网&#xff1a;Database | Oracle 中文官网&#xff…

考研要求掌握C语言(归并排序)

归并排序考啥&#xff1f; 在考研中归并排序只出在选择题&#xff0c;理解原理很重要 且在考研中考靓靓归并&#xff0c;还是比较简单的 归并排序原理 就是每次分一半&#xff0c;直到每一半只含有一个或不能再分时&#xff0c;一半一半的进行排序&#xff0c;最终合并两个…

软件工程概论项目(一)

距离软工概论项目答辩还有五个周的时间&#xff0c;需要做一个项目&#xff0c;把心得体会都做一个记录。以便以后进行回顾和反思 这里写目录标题 一、环境的配置gitbash 一、环境的配置 gitbash 安装gitbash&#xff0c;简单说两句&#xff0c;git用于多人协作和代码托管&am…

Linux网络设置、FTP

Linux网络设置、FTP 文章目录 Linux网络设置、FTP查看网络接口信息 ifconfig查看主机名称 hostname命令查看路由表条目 route命令查看网络连接情况 netstat命令获取socket统计信息 ss命令测试网络连接 ping命令跟踪数据包 traceroute命令域名解析 nslookup命令设置网络参数的方…

【css flex 多行均分有间隙布局】

小程序、web均可使用&#xff0c;我当前用的是小程序 <view class"job_tab_container flex_between"><view class"job_tab_item"></view><view class"job_tab_item"></view><view class"job_tab_item&qu…

基于redis实现API接口访问次数限制

一&#xff0c;概述 日常开发中会有一个常见的需求&#xff0c;需要限制接口在单位时间内的访问次数&#xff0c;比如说某个免费的接口限制单个IP一分钟内只能访问5次。该怎么实现呢&#xff0c;通常大家都会想到用redis&#xff0c;确实通过redis可以实现这个功能&#xff0c…

口子查好做吗?有什么特点?

大家好&#xff0c;我是橙河老师&#xff0c;一家问卷公司老板&#xff0c;今天讲一讲“口子查好做吗&#xff1f;有什么特点&#xff1f;” 1.口子查是公开性资源&#xff0c;由国外问卷公司直接发布在主流的平台上&#xff0c;比如我们的抖音、百度这些平台&#xff0c;竞争…

【Windows】Android Studio 上cmd 换为Powershell 终端

最近在Windows 环境下Android Studio 的Terminal 终端&#xff0c;低版本默认用的是cmd.exe&#xff0c;好多linux 命令不支持&#xff0c;有时候一不小心就记忆错了&#xff1b;干脆直接换成Windows PowerShell 得了。 下载Powershell&#xff1a;https://aka.ms/PSWindows 选…

【Linux-进程间通信】了解信号量 + 共享内存 + 消息队列的应用

信号量&#xff08;了解&#xff09; 1.概念理论渗透 1.多个执行流&#xff08;进程&#xff09;&#xff0c;能看到的同一份资源&#xff1a;共享资源 2.被保护起来的资源-----临界资源---同步和互斥----用互斥的方式保护共享资源----临界资源 3.互斥&#xff1a;任何时刻…

Cesium着色器的创意和方法(五——Polyline)

不接受反驳&#xff0c;线段在三维里面的渲染比多边形的渲染更复杂。因为线是没有宽度的&#xff0c;并且还需要时时刻刻向着你。 首先看下Cesium的线段的一些效果。这条线段非常宽&#xff08;20个像素&#xff09;&#xff0c;有两个需要留意观察的。一是线段并非实时面对我…