【C++】循环、控制流语句、指针

8、循环(loops)
(1)for loops

for循环非常灵活,可以做很多事情。上图红框框出来的代码块就是一个for循环。

for是关键字
for后面内容分为三部分,每部分用分号;隔开

第一部分A是变量的声明,所以这里要声明变量,我们一般写int i=0;
变量名叫做i是一种惯例,可能是iterate的首字母。当然你也可以取你自己喜欢的名字。当然这个变量也不一定必须是int类型的,也不一定非得从0开始。

第二部分B是条件。如果条件为真,就执行for循环内部代码。这里i<5表示只要变量i小于5就满足循环条件。

第三部分C,i++会在for循环的下一次迭代之前被调用。所以我们也可以写i+=1或者写i=i+1。意思都是每迭代一次,变量i都要加1

D是循环体,就是每循环一次都要被执行的代码。

E是循环结束的标志。

再总结一遍:
指令指针指到第7行时,首先要做的是声明一个新变量i;接下来看这个变量是否满足条件;
如果条件B返回值为true,就跳到第9行(for循环体D),执行for循环体。当for循环体执行完毕后,指令指针就走到for循环的尾部花括号E处,看到E,指令指针就再跳转到C处执行C,就是给变量i加1;加完后指令指针再跳到B,看变量是否满足条件。

如果条件B返回值为true,就跳到第9行(for循环体D),执行for循环体。当for循环体执行完毕后,指令指针就走到for循环的尾部花括号E处,看到E,指令指针就再 跳转到C处执行C,就是给变量i加1;加完后指令指针再跳到B,看变量是否满足条件。

如此循环,直到B不满足条件,也就是B返回false,指令指针跳出for循环,也就是执行E后面的代码行(第12行)。

说明:
for循环的三部分:
第一部分(int i =0;)只是在开始时运行一次。
第二部分(i<5;)是一个比较后的bool类型。
第三部分(i++;)是要在for循环结束(})后被运行的。

所以,for循环我们也可以这样写:

所以,只要你不改变执行逻辑,你在代码形式上可以行云流水,你还可以在循环体内调用函数等等,无限可能。

(2)while loops

其实while循环和for循环一模一样!
首先,while循环同样要声明变量i,只是上例中的i已经存在了,并且i已经等于5了。
其次,while循环同样需要条件,上例的条件是i>0,满足条件就跳到循环体执行循环体的代码。
最后,循环体代码执行完毕后,同样是要执行变量的自增或者自减,这里是自减i--;否则就是无限循环了。

既然while循环和for循环一样,那为什么既生亮何生瑜?
我们约定成俗是这样使用的:当我们确实是想无限持续循环的,比如游戏,就是想让一帧帧一直循环,我们不在意究竟循环了多少次,循环到哪里,就是不介意是否要去声明i,也不介意i究竟是多少了,就是想无限循环下去,那我们就使用while循环。但是当我们想循环一个确定长度的数组,而且想追踪每个元素的信息,此时我们非常在意i究竟是多少了,此时用for循环。

在举个例子:

(3)do while

循环就是这3种写法。至于汇编及CPU指令上的循环,就非常复杂了,以后有机会再探讨。

9、控制流语句:continue、break、return

continue只能在循环中使用,表示进入这个循环的下一个迭代iteration。当然前提是有下一个迭代,如果没有就结束。

break是主要用于循环中,也可以用在switch语句中。break表示跳出其所在的循环,也就是终止它所在的那层循环。

return表示跳出函数。如果一个函数中,碰到return关键字,你就会退出这个函数。但是函数是要有一个返回值的,如果你只是return,那就相当于函数只返回了return本身,而return本身就相当于void,所以return本身只适用于void函数。

(1)continue

下面我们断点的方式看看程序是如何执行的:

小结:
a、对于for语句,第一执行for语句时,是先初始化i,然后判断条件。如果条件是true,就执行循环体,一直执行到for循环的最后的花括号},跳回到for语句,此时首先执行的是i++,然后再判断条件,条件true就是上面的一套流程;如果条件false就直接跳出循环体。

b、如果在循环体中遇到continue,就直接跳回for语句。那跳回for语句,就要执行for语句,那就是先执行i++,再判断条件,再根据条件,true就执行循环体,false就跳出循环。

(2)break

(3)return

但是return是可以用在函数的任何地方的,不限于循环中。

小结:
在C++语言中,这些if语句或其他条件语句、循环语句、控制流语句就是编程的基本逻辑。我们就是使用这些工具来控制程序的流程。这些也是编写应用程序的基本构建块。

10、指针

这里我们先讨论原始的指针raw point,不是智能指针smart point。

计算机处理的是内存。对计算机来说,内存就是一切。所以编程中最重要的事情就也是内存memory!当你编写一个应用程序并启动它时,所有程序都被载入到内存,所有的指令都是告诉cpu,你的代码是要做什么的。你的程序加载到内存也就是,cpu可以访问你的程序并开始执行程序中的指令。而指针就是管理和操作内存的。

(1)什么是指针?
指针就是一个整数,但是这个整数是内存地址的数字。所以指针就是一个地址。
这就好比,一个变量int a = 5;表示这个变量存储在某个内存单元中,存储的值是数字5。而一个指针 int *a = 5;表示这个指针a也是存储在内存的某个内存单元中,但这个内存单元中存的不是数字5,而是另一个内存单元的数字序号,这另一个内存单元里面存的是一个数字5。

说明:由于本部分内容是参考【16】C++指针_哔哩哔哩_bilibili 国外和我们还是有些不一样的,至少在某些名称的翻译上不会太一致。所以看不懂的同学先回看我的【C语言学习笔记】四、指针_通过变量名访问内存单元中的数据缺点-CSDN博客 这篇文章,这篇文章把指针说得非常明白了。然后你再回头看cherno的视频,你就理解了。

小结:
定义指针变量的时候就是:
先写这个指针指向的地址中存的数据的类型,当然你还没想好这个指针变量指向谁,那你就写个void类型指针吧。
然后再写*\号,星号就是普通变量和指针变量的区别。
然后再写指针变量的名称。
这样我们就定义了一个指针变量。

说明:我们是不需要定义指针变量自身的类型的!指针变量有的编译器指定是4个字节,有的是8个字节,anyway,都不重要。就是指针变量自身的数据类型是不用管的,是不重要的。因为指针就是存地址的,所以它的存放空间的大小不会变来变去。

当我们定义了一个指针变量后,这个指针变量还没有初始化,就是这个变量还没有赋值,此时这个变量的值是内存中这个地址上的原来的值,所以此时这个指针变量是一个野指针,你千万不能解引用重新赋值,你可能就修改了不该修改的地方,系统就崩溃了。
所以当我们定义一个指针变量时,一定要同时初始化赋值!如果你还没想好要指向什么地址,那你先指向NULL,就是指向0地址,这样就不会出现致命的错误,等你想好了你再修改。

当我们已经确定指针变量要指向哪里,那你就必须在最开始写对你指向的地方的数据的类型,这样这个指针变量才能读写那个数据。否则只是指向了那个数字的首地址,要读写时,到底是取几个字节,编译器就不知道了,所以就没法读写了。

待续。。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240623(26.0) 重要财经新闻

财经关注 ► 券商中国&#xff1a;北交所于6月21日晚间受理了3家企业的IPO申请。6月20日晚间&#xff0c;沪深交易所各受理了1家IPO申请。这也意味着&#xff0c;三大交易所IPO受理全部恢复。与此同时&#xff0c;三大交易所IPO上市委会议也已经全部重启。 ► 全球多地近期遭遇…

【数据挖掘】机器学习中相似性度量方法-切比雪夫距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

群体优化算法---电磁共振优化算法(EROA)介绍包含示例滤波器设计

介绍 电磁共振优化算法&#xff08;Electromagnetic Resonance Optimization Algorithm, EROA&#xff09;是一种新型的元启发式优化算法&#xff0c;其灵感来源于电磁共振现象。电磁共振是一种物理现象&#xff0c;当一个系统在特定频率下响应最大时&#xff0c;这个频率被称…

数据结构和算法(1) ---- Queue 的原理和实现

Queue 的定义和结构 队列(Queue) 是只允许在一端进行插入&#xff0c;在另一端进行删除的线性表 队列是一种先进先出(First In First Out)的线性表&#xff0c;简称 FIFO(First IN First OUT), 允许插入的一端称为队尾, 允许删除的一端称为队列头 队列的基本结构如下图所示&a…

使用python绘制三维曲面图

使用python绘制三维曲面图 三维曲面图三维曲面图的用途效果代码 三维曲面图 三维曲面图是一种用于展示三维数据的图表&#xff0c;通过一个连续的曲面来表示数据的变化情况。它通常用于可视化数学函数或实验数据的三维关系&#xff0c;可以非常直观地展示变量之间的复杂关系。…

大电流与小电流在检测原理上有区别吗

1 常用电流检测原理 1.1 分流器原理 被测量的电流在输入端电阻上Rshunt形成电压正比于测量电流&#xff0c;通过同相比例电路进行放大输出。 缺点&#xff1a; 输入电流减小时&#xff0c;需要更大的Rshunt&#xff1b;输入电阻Rshunt串入检测回路内将引起被测电流减小&a…

App推广告别邀请码,Xinstall助您一键触达海量用户!

在移动互联网高速发展的今天&#xff0c;App的推广与运营已成为每个开发者都必须面对的问题。然而&#xff0c;随着互联网流量的日益分散和用户需求的不断变化&#xff0c;传统的App推广方式已经难以满足现代市场的需求。尤其是在获取用户时&#xff0c;很多开发者还在采用传统…

我们是否需要AI服务器?推动人工智能繁荣发展的AI服务器

揭穿人工智能服务器的炒作 人工智能的研究已经有几十年了&#xff0c;早在 1960 年代&#xff0c;生成式人工智能就已应用于聊天机器人。然而&#xff0c;2022 年 11 月 30 日发布的 ChatGPT 聊天机器人和虚拟助手席卷了 IT 界&#xff0c;让 GenAI 成为家喻户晓的术语&#x…

(2024.6.23)最新版MAVEN的安装和配置教程(超详细)

1.什么是MAVEN Maven是一个自动化构建工具&#xff0c;主要用于Java项目&#xff0c;它由Apache软件基金会维护。Maven能够自动化完成编译、测试、打包、发布等构建过程&#xff0c;可以大大提高开发效率&#xff0c;保证项目的质量。 下面我们从几个方面来介绍一下MAVEN的功能…

字节跳动:从梦想之芽到参天大树

字节跳动掌舵人&#xff1a;张一鸣 2012年&#xff1a;梦想的起点&#xff1a;在一个阳光明媚的早晨&#xff0c;北京的一座普通公寓里&#xff0c;一位名叫张一鸣的年轻人坐在电脑前&#xff0c;眼中闪烁着坚定的光芒。他的心中有一个梦想——通过技术改变世界&#xff0c;让…

PHP米表域名出售管理源码带后台

源码介绍 html5米表源码PHP域名销售程序安装方法&#xff1a; 本站已测试,各项功能正常,功能易用,不复杂,非常适合个人米表使用 1、所有文件传至网站目录 2、浏览器执行http://你的访问网址/install 3、输入mysql帐号及密码信息&#xff0c;提交安装 源码截图 源码下载 …

【2024最新版】Java JDK安装配置全攻略:图文详解

目录 1. 引言2. 准备工作2.1 **确定操作系统**2.2 **检查系统要求**2.3 **下载JDK安装包**3. 安装步骤&#xff08;以Windows系统为例&#xff09;4. 配置环境变量4.1 jdk配置验证4.2 **配置JAVA_HOME环境变量**4.3 **配置Path环境变量**4.4 验证jdk是否配置成功 5. 结语 1. 引…

轻松重命名Windows用户Users目录下的文件夹名称

设置系统还原点 为避免设置失败&#xff0c;需提前准备好系统还原点以备份恢复系统。 打开系统属性&#xff1a; 在“系统保护”选项卡中&#xff0c;选择你想要保护的系统驱动器&#xff08;通常是C:驱动器&#xff09;。 点击“配置”按钮。 在弹出的窗口中&#xff0c;选…

opencascade AIS_InteractiveContext源码学习1 object display management 对象显示管理

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

20240623 每日AI必读资讯

&#x1f916;原生鸿蒙AI浓度要爆表了&#xff01; - 一年一度华为开发者大会上&#xff0c;余承东首次揭秘“鸿蒙原生智能”Harmony Intelligence&#xff01; - 华为小艺进化成系统级智能体。 - 一句话实现跨多个应用的规划和任务执行&#xff1b;在第三方APP上随意处理文…

NSIS 入门教程 (三)

引言 在教程的第二部分中&#xff0c;我们为安装程序增加了一个卸载程序&#xff0c;并查看了一些其他的向导页面以及安装部分的选择。第三部分的目标是使安装程序的外观更加现代化。 更现代的外观 为了给安装程序一个更现代的外观&#xff0c;我们要启用现代用户界面。要提…

java基于ssm+jsp 社区疫情防控管理信息系统

1前台首页功能模块 社区疫情防控管理信息系统&#xff0c;在社区疫情防控管理信息系统可以查看首页、物品信息、论坛信息、新闻资讯、我的、跳转到后台等内容&#xff0c;如图1所示。 图1系统首页界面图 用户登录、用户注册&#xff0c;通过注册填写账号、密码、姓名、身份证、…

supOS浅度集成

一、浅度集成介绍 浅度集成是根据项目或者演示要求而做的集成工作&#xff0c;通过接入supOS的单点登录&#xff0c;UI调整&#xff0c;菜单栏的集成&#xff0c;从而达到客户使用supOS平台来使用各个应用的能力。 二、浅度集成的作用 通过较少的研发投入使APP应用浅度融入到…

密码学-密码协议之零知识证明

一、前言 零知识证明实际上一种密码协议&#xff0c;该协议的一方称为证明者(Prover)&#xff0c;通常用P表示&#xff0c;协议的另一方是验证者(Verifier)&#xff0c;一般用V表示。零知识证明是指P试图使V相信某个论断是正确的&#xff0c;但却不向V提供任何有用的信息&…

随记:内卷是什么意思?

内卷&#xff0c;网络流行语&#xff0c;原指一类文化模式达到了某种最终的形态以后&#xff0c;既没有办法稳定下来&#xff0c;也没有办法转变为新的形态&#xff0c;而只能不断地在内部变得更加复杂的现象。经网络流传&#xff0c;很多高等学校学生用其来指代非理性的内部竞…