news 2026/6/10 0:49:52

C语言之switch 语句

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言之switch 语句

很多初学者认为 switch 只是 if-else 的另一种写法,但实际上它在底层实现(跳转表)和代码可读性上有独特的优势。

以下是关于 switch 语句从基础语法到底层原理,再到实战陷阱的全方位指南。
一、 switch 的核心语法结构
switch 是一种多分支选择结构,专门用于处理“变量等于某一个特定值”的场景。
1. 标准语法模板
2. 关键规则(硬性限制)
这是 switch 最“死板”的地方,也是最容易报错的地方:
表达式类型限制: switch 后的括号里,结果必须是整型( int , short , long )或 字符型( char )。
❌ 错误: switch (3.14) 或 switch ("abc") 是不允许的。
✅ 正确: switch ('a') 或 switch (100) 。
case 必须是常量: case 后面跟的必须是编译时就能确定的数值,不能是变量。
❌ 错误: case x: (x 是变量)。
✅ 正确: case 1: 或 case 'A': 。
二、 灵魂所在: break 与 “穿透效应”
这是 switch 最难理解,也最能体现水平的地方。
1. break 的作用
break 就像是一个“出口”,一旦执行到 break ,程序就会立刻跳出整个 switch 结构,不再往下看。
2. 没有 break 会发生什么?(穿透效应)
如果省略了 break ,程序在执行完匹配的 case 后,不会停止,而是会继续执行下一个 case 的代码,直到遇到 break 或 switch 结束。

高手的技巧(合理利用):
当多个 case 需要执行完全相同的代码时,可以利用穿透来简化代码。
三、 default 的位置与作用
default 就像是“垃圾桶”,用来处理所有没被 case 匹配到的情况。
1. 位置不固定: default 不一定非要写在最后,它可以写在任何 case 之间。
但是,为了代码可读性,强烈建议写在最后。
2. 穿透风险:如果 default 写在中间,且没有 break ,它也会穿透到下面的 case 。
3. 是否必须: default 是可选的。如果你能确保变量只会取 case 里的值(比如枚举类型),可以不写。但为了程序的健壮性(防止非法输入),通常建议保留。
四、 switch vs if-else :底层原理与性能
为什么要有了 if-else 还需要 switch ?
1. 代码可读性:
当判断条件超过 3-4 个时, switch 的代码结构比嵌套的 if-else 清晰得多,一眼就能看出是在做“定值匹配”。
2. 底层实现与性能(重点):
if-else :像走楼梯。程序需要一个一个判断( if (a==1)... else if (a==2)... ),运气不好可能要判断到最后一个才匹配。
switch :在特定条件下( case 数值比较密集),编译器会优化成“跳转表” (Jump Table)。
原理:它会直接计算出 变量 - 最小值 的偏移量,直接跳到对应的代码地址。
结果:无论有多少个 case ,匹配速度几乎是一样的(O(1) 复杂度)。
结论:
判断范围(如 score > 90 ):必须用 if 。
判断离散的固定值(如 menu == 1 , menu == 2 ):优先用 switch ,不仅好看,而且在数据量大时更快。
五、 进阶实战:菜单驱动程序
switch 最经典的应用场景就是写控制台菜单。

六、 避坑指南(Checklist)
在写 switch 时,请时刻问自己三个问题:
1. 我加 break 了吗?(90%的错误源于忘记 break)。
2. 我的 case 是常量吗?(变量会报错)。
3. 我考虑非法输入了吗?(加上 default 处理异常)。
掌握了这些,你就真正“吃透”了 C 语言的 switch 语句。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 14:16:56

手把手教你大模型离线部署 从硬件选型到性能调优 一

导读 为什么要做离线部署、常见场景与约束 1. 为什么要进行离线部署 离线部署通常指的是在不依赖实时网络连接的情况下运行模型。这种部署方式广泛应用于多种场景,并且有其独特的优势和应用场景: 隐私保护:离线部署可以减少对第三方服务的依赖,从而提高数据的安全性和隐私…

作者头像 李华
网站建设 2026/6/9 1:43:50

48、Linux 本地网络配置全攻略

Linux 本地网络配置全攻略 1. DHCP 客户端配置 理想情况下,DHCP 客户端应在系统启动时运行。这通常通过其自身的启动脚本处理,或者作为主网络配置启动文件的一部分(通常是名为 network 或 networking 的启动脚本)。系统常通过配置文件中的一行来确定是否运行 DHCP 客户端…

作者头像 李华
网站建设 2026/6/9 19:52:26

49、深入了解Linux网络配置与故障诊断

深入了解Linux网络配置与故障诊断 1. 使用PPP连接DSL网络 对于宽带用户,尤其是使用数字用户线路(DSL)连接的用户,有时需要使用点对点协议(PPP)的变体来建立连接。PPP是一种基于登录的互联网访问方式,使用PPP工具发起与远程计算机的连接,过程中需要交换用户名和密码。…

作者头像 李华
网站建设 2026/6/9 14:41:47

54、Linux 系统中的脚本编写与邮件管理指南

Linux 系统中的脚本编写与邮件管理指南 在 Linux 系统的使用过程中,脚本编写和邮件管理是非常重要的技能。下面将详细介绍如何创建简单脚本以及如何管理邮件。 创建简单脚本 创建一个简单的 shell 脚本,该脚本可以让你选择使用 less 命令读取当前目录下的每个文本文件(…

作者头像 李华
网站建设 2026/6/9 20:57:16

56、Linux 系统管理与安全防护全解析

Linux 系统管理与安全防护全解析 1. Linux 系统基础技能 1.1 SQL 学习与应用 SQL 是一个复杂的主题,这里仅作简要介绍。若想深入了解,可参考 SQL 软件包文档,也可阅读相关书籍,如 Alan Beaulieu 的《Learning SQL, 2nd Edition》和 Larry Rockoff 的《The Language of S…

作者头像 李华
网站建设 2026/6/9 21:02:27

用MapsModelsImporter在Unity中构建真实世界:3D地图导入全攻略

想不想把你的游戏世界直接搬到现实中的巴黎街头?或者让玩家在虚拟的纽约曼哈顿自由穿梭?现在这一切都变得触手可及!🚀 【免费下载链接】MapsModelsImporter A Blender add-on to import models from google maps 项目地址: http…

作者头像 李华