关注 0基础学逆向一起学逆向https://mp.weixin.qq.com/s/Qsw1eRvY51i8-XEebFfm5g
一、Switch 标准语法(固定格式)
switch (表达式) // 只能是:整数/字符/枚举,不能是浮点数、字符串 { case 常量1: // 必须是**常量**,不能是变量 执行语句; break; // 必须写!否则会“穿透”往下执行 case 常量2: 执行语句; break; default: // 所有 case 都不匹配时执行(可选) 执行语句; break; }重点 ✅
- case 后面必须是常量
(固定值,不能是变量、区间)
- 每个 case 尽量加 break
不加 break 会发生穿透:匹配成功后,会一直往下执行所有代码,直到遇到 break 才停止。
二、最关键:break 穿透演示
错误代码(没写 break):
int num = 1; switch(num) { case 1: printf("A"); // 会执行 // 没有 break! case 2: printf("B"); // 也会执行! break; } // 输出结果:AB正确代码(加break)
int num = 1; switch(num) { case 1: printf("A"); break; // 执行完立刻跳出 case 2: printf("B"); break; } // 输出结果:A三、Switch 和 if-else 的区别
特点 | switch | if-else |
|---|---|---|
判断类型 | 只能等值判断 (固定值) | 支持区间判断 (> < >=) |
效率 | 多分支时更高效 | 分支多效率稍低 |
适用场景 | 值固定、分支多(菜单、选项) | 范围判断、复杂条件 |
表达式类型 | 整数、char、枚举 | 任意布尔表达式 |
一句话记忆
- 固定值选 switch
- 区间范围选 if-else
四、完整可运行示例
#include <stdio.h> int main() { int choice = 2; switch(choice) { case 1: printf("你选择了:星期一"); break; case 2: printf("你选择了:星期二"); break; case 3: printf("你选择了:星期三"); break; default: printf("输入无效"); break; } return 0; } // 输出:你选择了:星期二总结
- switch 只做等值判断
case 必须是常量
- break 必须写
防止代码穿透
多固定值分支用 switch,区间判断用 if-else
default 处理所有不匹配的情况(可选但推荐写)