当前位置: 首页 > news >正文

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 。

相关文章:

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

前言 今天我们来看看条件语句&#xff0c;换句话说&#xff0c;也就是 if 语句、if else 和 else if 等等这写语句。 我知道大家基本上已经非常了解 if 语句和所有 C 中的分支语句&#xff0c;但我还是鼓励你们继续看完这一讲&#xff0c;这里可能包含一些新东西。我们还会深入…...

django+drf+vue 简单系统搭建 (4) 用户权限

权限控制是web中的重要组成部分。与以往的博客系统不同&#xff0c;本次工具页面仅支持注册用户。 每个注册用户都能访问到工具页面&#xff0c;并且提交自己的task来选择具体的工具来处理自己提交的文件。每个注册用户都只能访问到自己提交的task&#xff0c;而管理员则可以查…...

stm32 计数模式

计数模式 但是对于通用定时器而言&#xff0c;计数器的计数模式不止向上计数这一种。上文基本定时器中计数器的计数模式都是向上计数的模式。 向上计数模式&#xff1a;计数器从0开始&#xff0c;向上自增&#xff0c;计到和自动重装寄存器的目标值相等时&#xff0c;计数器清…...

rss服务搭建记录

layout: post title: RSS subtitle: vps搭建RSS服务 date: 2023-11-27 author: Sprint#51264 header-img: img/post-bg-universe.jpg catalog: true tags: - 折腾 文章目录 引言RSShub-dockerRSS-radarFreshrssFluent reader获取fever api配置Fluent Reader同步 结语 引言 一个…...

GEE 23:基于GEE实现物种分布模型之随机森林法

基于GEE实现物种分布模型之随机森林法 1.物种分布数据2.研究区绘制3.预测因子选择 1.物种分布数据 根据研究目的和需要导入物种数据&#xff1a; // Load presence data var Data ee.FeatureCollection("users/************736/Distribution"); print(Original da…...

HCIE 01:基于前缀列表的BGP ORF功能

当运行BGP协议的某台设备上&#xff0c;针对入方向配置了基于ip-prefix的路由过滤&#xff0c;过滤了邻居发送的路由&#xff1b; 目前想&#xff0c;通过在peer关系的两端设备上都配置ORF功能&#xff0c;实现路由发送端只能送路由接收端过滤后的路由&#xff1b; ORF功能的说…...

基于SSM的云鑫曦科技办公自动化管理系统设计与实现

基于SSM的云鑫曦科技办公自动化管理系统设计与实现 摘 要: 随着时代的发展&#xff0c;单位办公方式逐渐从传统的线下纸张办公转向了使用个人pc的线上办公&#xff0c;办公效率低下的传统纸质化办公时代的淘汰&#xff0c;转型到信息化办公时代&#xff0c;面对当今数据逐渐膨…...

Angular项目中如何管理常量?

在Angular项目中&#xff0c;你可以使用不同的方式来管理常量。以下是一些常见的方法&#xff1a; 1、常量文件&#xff1a; 创建一个单独的 TypeScript 文件&#xff0c;其中包含你的常量。例如&#xff0c;创建一个名为 constants.ts 的文件&#xff0c;并在其中定义你的常量…...

【机器学习 | 可视化】回归可视化方案

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…...

树与二叉树堆:链式二叉树的实现

目录 链式二叉树的实现&#xff1a; 前提须知&#xff1a; 前序&#xff1a; 中序&#xff1a; 后序&#xff1a; 链式二叉树的构建&#xff1a; 定义结构体&#xff1a; 初始化&#xff1a; 构建左右子树的指针指向&#xff1a; 前序遍历的实现&#xff1a; 中序…...

C++面试的一些总结day1:指针和引用的区别

文章目录 指针和引用的区别和作用定义区别作用 指针和引用的区别和作用 定义 指针&#xff1a;指针是一个变量&#xff0c;其值为指向对象的内存地址&#xff0c;而不是值本身。引用&#xff1a;可以理解为对象的别名&#xff0c;是另外一个变量的直接别名&#xff0c;用于创…...

Java核心知识点整理大全15-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…...

初始本地仓库推送到远程仓库-git

背景&#xff08;问题描述&#xff09; 下面的git的操作符合的情况是&#xff1a; ①本地初始化一个仓库&#xff0c;但是还没有和远程仓库相关联&#xff1b; ②远程仓库也刚刚创建&#xff0c;里面啥也没有 然后目前就想将本地的仓库的内容和远程仓库相关联并推送到远程仓…...

OpenCV | 图像梯度sobel算子、scharr算子、lapkacian算子

import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline 1、sobel算子 img cv2.imread(pie.png,cv2.IMREAD_GRAYSCALE) cv2.imshow(img,img) cv2.waitKey() cv2.destroyAllWindows() pie图片 dst cv2.S…...

WS2812灯条基于WLED开源项目无门槛使用简介

WS2812灯条基于WLED开源项目无门槛使用简介 &#x1f4cc;项目github地址&#xff1a;https://github.com/Aircoookie/WLED&#x1f4cd;WLED详情地址&#xff1a;https://kno.wled.ge/&#x1f388;网页在线烧录固件地址&#xff1a;https://install.wled.me/ ✨ 仅作为使用的…...

基于AOP的声明式事物控制

目录 Spring事务编程概述 基于xml声明式事务控制 事务属性 isolation timeout read-only propagation 全注解开发 Spring事务编程概述 事务是开发中必不可少的东西&#xff0c;使用JDBC开发时&#xff0c;我们使用connection对事务进行控制&#xff0c;使用MyBatis时&a…...

第七节HarmonyOS UIAbility生命周期以及启动模式

一、UIAbility生命周期 为了实现多设备形态上的裁剪和多窗口的可扩展性&#xff0c;系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态&#xff0c;WindowStageCreate和WindowStageDestroy为窗口管理器&#xff08…...

matlab设置背景颜色

matlab默认的背景颜色是纯白RGB(255,255,255)&#xff0c;纯白太刺眼&#xff0c;看久了&#xff0c;眼睛会酸胀、疼痛&#xff0c;将其改成豆沙绿RGB(205,123,90)&#xff0c;或者给出浅绿色RGB(128,255,255), 颜色就会柔和很多&#xff0c;眼睛感觉更舒适。     下面介绍在…...

Linux gzip命令用法详解:如何压缩和解压文件(附实例教程和注意事项)

Linux gzip命令介绍 Linux gzip命令用于压缩文件。它可以减小文件的大小以节省磁盘空间&#xff0c;并且可以通过gzip命令将多个文件合并成一个压缩文件。 Linux gzip命令适用的Linux版本 Linux gzip命令可以在多数Linux发行版&#xff08;如Debian、Ubuntu、Alpine、Arch L…...

初刷leetcode题目(11)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…...

3种核心技术实现Cursor Pro功能无限访问的深度解析

3种核心技术实现Cursor Pro功能无限访问的深度解析 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request lim…...

5962-88769022A,兼容LSTTL/TTL/CMOS逻辑与6.4mA驱动能力的防抖动逻辑门光耦

简介今天我要向大家介绍的是 Broadcom 的光电耦合器——5962-88769022A。它的每一条通道都由一颗AlGaAs发光二极管和一颗带有迟滞阈值的高增益光子探测器组成。当输入端接收到2mA到8mA的微小电流时&#xff0c;LED便会发光。而接收端的探测器不仅负责捕捉光信号&#xff0c;其内…...

从Android 1.0到Android 11:SDK版本演进史与开发适配指南

Android SDK版本演进与开发适配实战指南 引言&#xff1a;为什么开发者需要关注SDK版本&#xff1f; 2008年9月&#xff0c;当第一台搭载Android 1.0的HTC Dream面世时&#xff0c;没人能预料到这个绿色机器人会在移动生态中掀起怎样的革命。十三年间&#xff0c;Android经历了…...

GBase 8a 字符集、排序规则和字符串比较结果偏差

GBase 8a 字符集、排序规则和字符串比较结果偏差 我最近看资料和整理现场问题时&#xff0c;越来越觉得 GBase 8a 里很多“查出来不对”的问题&#xff0c;并不是表没导对&#xff0c;也不是 SQL 逻辑写错了&#xff0c;而是字符集、排序规则、大小写处理和字符串比较语义没有统…...

2025_NIPS_CELLVERSE: Do Large Language Models Really Understand Cell Biology?

一、文章主要内容总结 该研究聚焦于大语言模型(LLMs)在细胞生物学领域的应用能力评估,核心贡献是构建了首个统一的语言中心型基准数据集CELLVERSE,并通过系统实验揭示了LLMs在单细胞分析任务中的表现与局限: 背景与问题:现有单细胞分析方法存在缺乏统一性(需为不同多组…...

终极QMC音频解密指南:3分钟解锁QQ音乐加密文件

终极QMC音频解密指南&#xff1a;3分钟解锁QQ音乐加密文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的加密音频无法在车载音响、智能音箱上播放而烦…...

构建高效云点播系统(一):开源组件选型、安全防护与性能优化

1. 开源组件选型&#xff1a;从零搭建云点播系统的基石 第一次接触云点播系统时&#xff0c;我被各种开源组件的选择搞得晕头转向。经过几个项目的实战&#xff0c;我发现选对开源组件就像搭积木&#xff0c;基础打好了&#xff0c;后面的事情就水到渠成。这里分享几个我踩过坑…...

HS2-HF Patch:Honey Select 2游戏体验全面优化解决方案

HS2-HF Patch&#xff1a;Honey Select 2游戏体验全面优化解决方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch是针对Honey Select 2游戏开发的…...

Hunyuan-MT-7B开源镜像实操:Pixel Language Portal在Jetson Orin边缘设备上的轻量部署

Hunyuan-MT-7B开源镜像实操&#xff1a;Pixel Language Portal在Jetson Orin边缘设备上的轻量部署 1. 项目概览 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于Tencent Hunyuan-MT-7B核心引擎构建的创新翻译工具。与传统翻译软件不同&#xff0…...

解锁Dell G15散热潜能:开源Thermal Control Center实战指南

解锁Dell G15散热潜能&#xff1a;开源Thermal Control Center实战指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 厌倦了官方AWCC的臃肿和迟缓&#xff1…...