switch...case...和if...else...区别

2023-10-26

switch 和 if 都是用来处理分支语句的,那么使用的时候,考虑到代码效率问题,就必须先来了解他们有什么区别。

先来看看这两个语句的使用格式:

  • if…else…
    if (表达式1)
    {
        语句1;
    }
    else if (表达式2)
    {
        语句2;
    }
    else if (表达式3)
    {
        语句3;
    }
    else if (表达式4)
    {
        语句4;
    }
    ...
    else
    {
        语句n+1;
    }

  • switch…case…
    switch (表达式)
    {
    case 值1:语句1;break;
    case 值2:语句2;break;
    case 值3:语句3;break;
    case 值4:语句4;break;
    case 值5:语句5;break;
    ...
    default:语句n+1;break;
    }

if语句每执行一次都要先判断条件表达式是true还是false,为true时执行相应语句,若为false则继续判断下一个表达式,直到最后一个else结束。线性执行。
switch语句只需在入口时计算表达式的值,然后查找跳转表,执行对应语句,否则default。类似二叉树。

区别一:

switch…case…只能用于case值为常量的分支结构,而if…else…更加灵活。

区别二:

if判断条件为逻辑表达式,可以是布尔类型的合法表达式、可以是常量、枚举等。而switch 通常处理算术表达式,或字符。

区别三:

switch 进行一次条件判断后直接执行到程序的条件语句。而if…else 有几种条件,就得判断多少次。

区别四:

相比if语句,switch语句是以空间换时间的分支结构。因为它要生成跳转表,所以占用较多的代码空间。当case常量分布范围很大但实际有效值又比较少的情况,switch…case的空间利用率将变得很低。

区别五

分支较多时,使用switch的效率高于if,除非第一个if条件就为真。

其次,当分支较多时,使用if…else…代码可读性不如switch…case…高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

switch...case...和if...else...区别 的相关文章

  • 如何修复 scanf 将数据放入数组中?

    有人可以就 scanf 提出建议吗 message 是一个 4 行 x 16 列的数组 用户输入数字 全部为 1 位整数 后 按 Enter 键时会出现错误消息 正如所说 可能与 scanf 有关 for int i 0 i lt M i
  • 跳转到文件行c#

    我如何跳到文件中的某些行 例如 c text txt 中的第 300 行 using var reader new StreamReader c test txt for int i 0 i lt 300 i reader ReadLine
  • 用 C 语言制作查找表的最佳方法是什么?

    我正在开发一个嵌入式 C 项目 我有一个 LCD 显示屏 每个字符都有一个 5x7 点阵 要显示特定字符 您必须移动与要打开的点相关的 5 个字节 所以我需要制作某种带有键的查找表 我可以在其中传递 ASCII 字符 并返回一个 5 字节的
  • 在 Windows 上实现堆栈跟踪 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在为我正在编写的游戏实现一个崩溃报告工具 并且我想为该报告提供 相当 详细的本机堆栈跟踪 我已经在 GNU Linux 上实现
  • 从 C 调用带有字符串参数的 Go 函数?

    我可以从 C 调用一个没有参数的 Go 函数 按照下面的 https github com joeprivacy crefgo hello world 这通过编译go build和打印 Hello from Golang main func
  • 如果文本框不为空,如何添加并显示工具提示文本框 WPF

    需要显示提示 其中包含文本字段中的数据 文本框有数据时出现提示 只需使用绑定到 ToolTipService 附加属性即可 XAML
  • MDI应用程序中父窗体的问题

    我使用按钮作为容器中的控件 父窗体 当子窗体出现时 父窗体中的控件 按钮 图片 标签 出现在子窗体上并将其覆盖 我看不到子窗体 有谁知道如何防止这种情况 我不想将这些控件设置为 Control Visible false 因为当我最小化子表
  • C# - 获取 GPU 的总使用百分比

    我正在向我的程序添加一些新功能 这些功能当前通过串行连接将 CPU 使用情况和 RAM 使用情况发送到 Arduino 请参阅this https create arduino cc projecthub thesahilsaluja cp
  • 不明确的元函数或未定义的类型

    我是元功能的新手 我想编写一个函数 将复合类型中某种类型的所有匹配项替换为其他类型 在示例中 replace
  • Windows 消息

    我需要发送带有自定义 ID 的自定义 Windows 消息 其他应用程序将侦听该消息 Windows 是否为内部消息保留任何预定义的消息 ID 范围 如 SQL Server 那样 内部消息最多为 50 000 The 文档 https m
  • 如何使用最小起订量模拟 Controller.User

    我有几个 ActionMethods 查询 Controller User 的角色 如下所示 bool isAdmin User IsInRole admin 在这种情况下可以方便地行事 我开始使用这样的代码对这些方法进行测试 TestMe
  • 使用 ASP.NET Core Identity 将令牌保存在 Cookie 中

    我想在我的 身份 生成的 cookie 中保存一些内容 我目前正在使用文档中的默认身份设置 启动 cs services Configure
  • 当无法处理指定的情况时,在 switch 语句中抛出异常

    假设我们有一个函数可以在 MVC 应用程序的系统中更改用户的密码 public JsonResult ChangePassword string username string currentPassword string newPassw
  • MVC Razor for 循环

    我有这段代码 嵌套在表单帖子内 但我不断收到错误 它缺少结束语 for int i 0 i lt itemsCount i
  • 将引用托管代码中分配的内存的指针传递给非托管代码

    我在 C 中分配了一个大的 char 缓冲区 并且希望将指向此数据的指针传递给 DLL 中的未管理的 c 函数 现在我认为要使其工作 必须修复字符缓冲区 以便 GC 在函数工作时无法移动它 如果是这样 我会声明缓冲区已固定并调用 UNSAF
  • 正确重载 stringbuf 以替换 MATLAB mex 文件中的 cout

    MathWorks 目前不允许您使用cout当 MATLAB 桌面打开时 从 mex 文件中读取 因为它们已重定向 stdout 他们当前的解决方法是提供一个函数 mexPrintf 他们要求你改用 http www mathworks c
  • Azure:MissingRegistrationForLocation:未在位置“YYYY”中为资源类型“XXXX”注册订阅

    这最初是作为未找到订阅 https stackoverflow com questions 35071797 subscriptionnotfound the subscription resourcegroups could not be
  • 显式调用静态构造函数

    我想为下面的课程编写单元测试 如果名称不是 MyEntity 则 mgr 应为空 消极的单元测试 使用 Manager 私有访问器 我想将名称更改为 Test 以便 mgr 应该为空 然后会验证 mgr 值 为了实现这一点 我想显式调用静态
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • C++ 模板类问题中的类型条件

    使用海湾合作委员会4 2 我有这个条件类型的元模板 template

随机推荐

  • RocketMQ 安装和启动

    一 前言 系统环境 CentOS Linux release 7 9 2009 Core RocketMQ版本 4 7 1 我们会部署一套 RocketMQ 最小化的单机环境 包括一个 RocketMQ Namesrv 和 Broker 服
  • 【Transformer系列(1)】encoder(编码器)和decoder(解码器)

    前言 这个专栏我们开始学习transformer 自推出以来transformer在深度学习中占有重要地位 不仅在NLP领域 在CV领域中也被广泛应用 尤其是2021年 transformer在CV领域可谓大杀四方 在论文的学习之前 我们先
  • 第二章:25+ Python 数据操作教程(第十四节PYTHON 中的循环通过示例进行解释)持续更新中

    本教程通过几个实际示例介绍了在 python 中执行循环的各种方法 阅读本教程后 您将熟悉循环的概念 并将能够在现实世界的数据整理任务中应用循环 目录 什么是循环 现实世界中的循环示例 For 循环 Python 语法和示例 带 else
  • user-cf的理解-初衷

    使用user cf的初衷 以前的推荐算法 往往是基于内容标签的推荐 比如 用户喜欢了 数据挖掘导论 这本书 而这本书有 数据挖掘 这个标签 那么就给这个用户推荐 其他的 数据挖掘 类的图书 标签就像媒介一样 即是物品 即item 的属性 又
  • 互联网晚报

    今日看点 哪吒汽车第10万台量产车下线 仅用42个月 2022年首家银行理财子公司 浦银理财正式开业 京东成全国首批支持第三方商家接入数字人民币的企业 亚虹医药在科创板挂牌上市 A股迎来 泌尿生殖肿瘤第一股 刘慈欣 三体 英文版权以125万
  • 骚操作-CSDN浏览器助手已上线(就是个Chrome插件...)

    目录 概述 一 插件安装 1 进入csdn插件官网 2 本地下载csdn插件测试包 3 安装csdn插件测试包 4 解压csdn插件测试包并上传 5 开启csdn插件 6 查看插件信息 7 在新标签页中打开插件 二 功能测试 2 1 功能测
  • 图解!2023年国家社科基金年度项目

    9月4日 全国哲学社会科学工作办公室公示了2023年国家社科基金年度项目 其中重点项目有397项 一般项目有3185项 学术点滴 将重点项目和一般项目合并 利用DIKW软件统计和可视化 在国家社科基金年度项目中华东师范大学 中国人民大学 四
  • TCP/IP详解 卷1:协议 学习笔记 第二十三章 TCP的保活定时器

    一个TCP连接建立 然后经过任意时间 且中间路由器可以崩溃和重启 电话线可以挂断再接通 而连接依然保持 只要两端主机没有被重启 这意味着两端不交换任何信息 然而许多时候一个服务器希望知道客户主机是否崩溃 许多实现提供的保活定时器可提供这种能
  • Arthas监控java程序

    安装 1 解压缩arthas的压缩包 unzip arthas packaging bin zip 2 安装Arthas cd arthas install local sh 启动 以脚本的方式启动as sh 如图为启动成功 监控命令使用
  • 01. Windows基础:Dos命令

    文章目录 本文中的命令示例统一使用 来代表可以替换的内容 在使用时请不要真的输入 谢谢 0 Dos简介 1 目录相关 1 1 进入目录 1 2 进入另一个磁盘分区 1 3 列出当前目录下所有文件及文件夹 2 文件操作 2 1 浏览文件 2
  • 华为OD机试 - 相对开音节(Java)

    题目描述 相对开音节构成的结构为 辅音 元音 aeiou 辅音 r除外 e 常见的单词有bike cake等 给定一个字符串 以空格为分隔符 反转每个单词中的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构
  • 【自然语言处理】潜在语义分析【下】概率潜在语义分析

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 由于字数限制 分成两篇博客 自然语言处理 潜在语义分析 上 潜在语义分析 自然语言处理 潜在语义分析 下 概率潜在语义分析 2 概率潜在语义分析 概率潜在语义分析 probabili
  • FreeRTOS(任务管理的创建、删除、挂起、恢复)

    目录 一 任务的基本概念 二 任务状态的概念 1 Running 运行态 2 Ready 就绪态 3 Blocked 阻塞态 4 Suspended 挂起态 三 任务状态的切换 四 系统启动 1 vTaskStartScheduler 函数
  • IOS数据管理

    在 iOS 中 没有直接与 Android 中的 SharePreference 相对应的概念 而是使用不同的机制来处理应用程序的持久化数据 在 iOS 中 你可以使用以下几种方法来保存和读取应用程序的数据 UserDefaults 用户默
  • Halcon (64位)无法卸载或者卸载不彻底,没法再次安装?

    以管理员身份 切换到cmd 1 删除安装目录 rmdir S HALCONROOT 2 查询安装的Halcon版本 reg query HKLM SOFTWARE Wow6432Node MVTec HALCON Windows x64 3
  • 面试常用算法归纳

    面试常用算法归纳 算法时间复杂度 二叉查找树的时间复杂度 递归和分治 递归思维 汉诺塔问题 排序算法 最长子串 子序列 一维dp 有断层 最长递增子序列 最大子数组和 无重复字符的最长子串 买卖股票的最佳时机 二维dp 组合 子集 和排列
  • YOLOv5改进算法之添加CA注意力机制模块

    目录 1 CA注意力机制 2 YOLOv5添加注意力机制 送书活动 1 CA注意力机制 CA Coordinate Attention 注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制 CA 注意力机制的核心思想是引
  • Atmel Studio 7.0 快速上手指南(基于ASF)

    Atmel Studio 7 0 快速上手指南 基于ASF 程序员大本营 pianshen com
  • 【Kubernetes部署篇】K8s图形化管理工具Dasboard部署及使用

    文章目录 一 Dashboard简介 二 Dashboard部署安装 三 配置Dashboard登入用户 1 通过Token令牌登入 2 通过kubeconfig文件登入 四 Dashboard创建容器 五 扩展 一 Dashboard简介
  • switch...case...和if...else...区别

    switch 和 if 都是用来处理分支语句的 那么使用的时候 考虑到代码效率问题 就必须先来了解他们有什么区别 先来看看这两个语句的使用格式 if else if 表达式1 语句1 else if 表达式2 语句2 else if 表达式