P4 C++ 条件与分支(if)

前言

今天我们来看看条件语句,换句话说,也就是 if 语句、if else 和 else if 等等这写语句。

我知道大家基本上已经非常了解 if 语句和所有 C++ 中的分支语句,但我还是鼓励你们继续看完这一讲,这里可能包含一些新东西。我们还会深入一点看它如何在 C++ 中工作,这些对你理解程序如何运行是有一些帮助的。

01 分支语句能干什么

条件语句if 语句、 分支语句,这些都是什么意思呢?

  • 有些时候我们写程序的时候,我们需要对一个特定的条件进行评估,然后根据评估的结果,决定我们想要执行什么代码。
  • 举个例子,假设我们有一个变量 x 等于5,我们希望能够编写代码实现判断 这个变量的值是否确定等于5,这就是 条件语句 的本质,这里的条件就是 x 等于5,在此基础上我们可以进行适当的分支。
  • 这样的话,有两种情况会发生,当我们运行我们写的 if 语句时,有两个过程,首先是对实际 条件语句 的评估,然后是基于这个条语句评估后的分支语句。换句话说,如果条件为真,我们需要跳到我们源代码的某一部分,如果值为假,我们需要跳到我们源代码的另一部分。
  • 当我们开始一个应用程序时,整个应用程序及其所有模块加载到内存中。基本上所有这些指令组成了我们的程序,现在这些指令都存储在内存中,当我们有了条件语句所产生的分支,我们基本上是在告诉电脑,嘿,跳到我们的这部分内存开始吧在那里执行我们的指令。正因为如此在内存和分支之间跳跃,实际的过程会更复杂一点,这里有相当多的东西值得我们探索一下。

记住,if 语句就是在检查一个条件,如果这件事是真的,我们就去执行一组特定的代码

02 if语句例子

我们看一个例子。

先做一些解释。

== 操作符称为 比较运算符,它的作用是比较两边的值是否相等。有点像是一个函数,接受两个参数。它会返回一个布尔值类型的结果。

在整数或者在大多数原始的数据结构中,如果你要检查两个数,比如两个整数是否相等,比较运算符基本上是在获取他们的四个字节的内存,然后比较每个字节,这 2 个整数相等的条件是内存的每一位都必须相同

上面的程序将 x 和 5 比较的结果存储到布尔值的变量 ret中。

我们使用分支语句做点事情。

ret这里可以有两种写法。

// 第一种写法
if(ret)
// 第二种写法
if(ret== true)

这两种写法其实是一个意思,换句话说,在第一种写法中,如果 ret不是 true,这个 if 语句也将不会运行。

然后我们为这个 if 语句写了分支语句,换句话说,就是分支去哪里?条件成立后你想让我运行什么代码?

我们现在已经创建了一个分支,如果 ret为 true,我们打印hello world

03 if语句到底在做什么

那么 if 语句到底在做什么呢?它只是在检查这个数字是不是 0 ,如果它是 0,就不会执行 if 语句,如果它不是 0,它会跳到 if 语句内,这就是为什么这整个式子我们不需要做比较运算之类的事情,因为我们不需要检查它是否等于 1 或者是 0,我们可以直接说这个值是不是不是 0,这就是它所做的。

 对比两段代码,会发现,当ret 等于 5时,返回1,将ret = 6后,返回了0,hello world也打印了

指针变量也是如此

可以看到执行代码后,打印了指针为空,这是因为我们给指针变量p设置为了NULL,也就是空指针,else语句则是和if语句一起的,逻辑上就是如果****,否则***** 

04 else if

#include <iostream>
using namespace std;
int main()
{
   char *p = "hello";
   if(p == "world")
   {
      std::cout<< p<<endl;
   }else if (p == "hello")
   {
      std::cout<< p<<endl;
   }   
   return 0;
}

else if 只会是当 if 语句失败之后才会执行。

其实没有所谓的 else if 语句,只是将两个语句放在一行而已,和我们之前将 if 语句的内容的放在 if 的同一行是一样的。else if 只是一个小聪明而已,也就是说如果上面的 if 失败了,就尝试 else if。同样只有在前面的 if 失败后,才会触发 else 语句,才会去比较 p是不是 hello。就是这样。

我记得当我发现的时候,这让我很吃惊,因为我真的没意识到这一点,我觉得 else if 是关键字组合,但是实际上不是,else if 不是 C++ 的关键字,是先 else,然后再 if 。

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

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

相关文章

【精选】Ajax技术知识点合集

Ajax技术详解 Ajax简介 Ajax 即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c;是指一种创建 交互式、快速动态应用的网页开发技术&#xff0c;无需重新加载整个网页的情况下&#xff0c;能够更新页面局 部数据的技术。通过在…

[ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …

世微 dc-dc降压恒流 LED汽车大灯 单灯 14V5A 68W车灯驱动方案 AP5191

产品描述 AP5191是一款PWM工作模式,高效率、外围简单、外置功率MOS管&#xff0c;适用于4.5-150V输入的高精度降压LED恒流驱动芯片。输出最大功率150W&#xff0c;最大电流6A。AP5191可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5191 工作频率可以…

Oracle与Redis Enterprise协同,作为企业缓存解决方案

来源&#xff1a;虹科云科技 虹科干货丨Oracle与Redis Enterprise协同&#xff0c;作为企业缓存解决方案 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 单独使用Oracle作为企业缓存数据库时&#xff0c;会出现哪些问题呢&#xff1f;使用Redis Enterprise与Oracle共…

基于STM32的手势识别算法研究与应用

基于STM32的手势识别算法在人机交互和智能设备控制中具有重要的应用价值。本文将介绍基于STM32的手势识别算法的研究原理和实现步骤&#xff0c;并提供相应的代码示例。 1. 手势识别概述 手势识别是一种通过分析人体的手部动作和姿势来识别和理解人的意图的技术。基于STM32的…

Jina AI 的 8K 向量模型上线 AWS Marketplace,支持本地部署!

在当前多模态 AI 和大模型技术风头正劲的背景下&#xff0c;Jina AI 始终领跑于创新前沿&#xff0c;技术领先。2023 年 10 月 30 日&#xff0c;Jina AI 隆重推出 jina-embeddings-v2&#xff0c;这是全球首款支持 8192 输入长度的开源向量大模型&#xff0c;其性能媲美 OpenA…

如何将设置为静态IP的VMware虚拟机进行克隆以便可以复刻相应的环境

一定要关闭需要克隆的虚拟机右键要选择克隆的虚拟机&#xff0c;选择管理->克隆&#xff0c;进入克隆虚拟机向导 设定克隆出来的虚拟机名称以及位置&#xff0c;选择完成 克隆完成之后将会生成虚拟机&#xff0c;示例中生成的虚拟机为ubuntu-dev2 因为原本的虚拟机为静态ip的…

Pytorch中的tensor维度理解

Pytorch中的tensor维度理解 文章目录 Pytorch中的tensor维度理解摘要打消心理恐惧&#xff0c;从三维学起三维tensor参考文献 摘要 面对pytorch编程中的tensor时&#xff0c;我不时会感到恐惧。对里面数据是怎么排布的&#xff0c;一直没有一个直观的理解。今天我想把这个事情…

微软离Altman越近,离OpenAI就越远!

大数据产业创新服务媒体 ——聚焦数据 改变商业 在OpenAI这场连续剧中&#xff08;之所以说是连续剧&#xff0c;这个事情肯定没完&#xff0c;后面肯定还会出续集&#xff09;&#xff0c;让我倍感意外的是&#xff0c;Altman刚跟OpenAI分手&#xff0c;“离婚手续”都还没办…

模拟量采集----测量输入的电流

生活中的模拟量有很多 大多都为电压信号和电流信号 今天讲如何测量输入的电流信号 通过欧姆定律可知 电流测量的测量&#xff1a;是将电流加载在固定阻值的电阻上&#xff0c;来测量这个电阻二端的电压 最后反算出电流的大小 所用的公式是IU/R 我们使用仿真软件来看测量…

连接k8s和凌鲨

通过连接k8s和凌鲨&#xff0c;可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接&#xff0c;通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…

深度学习图像修复算法 - opencv python 机器视觉 计算机竞赛

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

基于SSM的旅游管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

如何用java的虚拟线程连接数据库

我觉得这个很简单 首先确保你idea支持jdk21. 然后把idea编译成的目标字节码设置为21版本的 然后编写代码。 创建虚拟线程的方式有&#xff1a; Runnable runnable () -> {System.out.println("Hello, world!"); };// 创建虚拟线程 Thread virtualThread Thre…

likeshop单商户商城系统 任意文件上传漏洞复现

0x01 产品简介 likeshop单商户标准商城系统适用于B2C、单商户、自营商城场景。完美契合私域流量变现闭环交易使用。 系统拥有丰富的营销玩法&#xff0c;强大的分销能力&#xff0c;支持电子面单和小程序直播等功能。无论运营还是二开都是性价比极高的100%开源商城系统。 0x02…

【OpenCV实现图像:使用OpenCV生成拼图效果】

文章目录 概要通用配置不考虑间隔代码实现考虑间隔代码实现小结 概要 概要&#xff1a; 拼图效果是一种将图像切割为相邻正方形并重新排列的艺术效果。在生成拼图效果时&#xff0c;可以考虑不同的模式&#xff0c;包括是否考虑间隔和如何处理不能整除的部分。 不考虑间隔&a…

java代码调用twitter-api用例实战

一、申请twitter开发者账号 首先先申请twitter开发者免费的API&#xff0c;要填写申请的内容&#xff0c;放心大胆地写&#xff0c;申请完&#xff0c;会提供免费的API接口。 以下是我申请到的三个免费API 申请完开始进行测试调用。 读官方文档账户认证那块&#xff1a;https…

Python 2.7 在 Debian 服务器上获取 URL 时的 SSL 验证失败问题与解决方案

在使用Python的requests库从Debian稳定服务器上获取简单URL时&#xff0c;遇到了SSL证书错误。 根据用户的问题描述&#xff0c;您遇到了SSL证书验证失败的问题。 要解决这个问题&#xff0c;您可以采取以下步骤&#xff1a; 1. 升级到Python 2.7的最新版本&#xff1a; 首…

基于SSM的课程资源管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

5-6求1-20的阶乘和

#include<stdio.h> //求阶乘 int main(){int n;double sum0;//求和&#xff1a;一点一点加int t1;for (n1;n<15;n){tt*n;sumsumt;}printf("结果是&#xff1a;%22.15e \n",sum);return 0; }为啥最后是%22.15e呢&#xff1f; 因为这个求和的结果太大了 所以转…