switch-case语句小结
参考网址:
http://mp.weixin.qq.com/s?__biz=MzI0NjYxMDQ4OQ==&mid=2247498189&idx=3&sn=57f4f64ed62b635de7ef0ee46849f148&chksm=e9be169bdec99f8de1fd16bbc3b61bd10e082895f69abbae6a374314d3e6e9efd698d9295135&mpshare=1&scene=23&srcid=1229J8Ycifm5oEEB3Ajs25Gv&sharer_sharetime=1609236657766&sharer_shareid=9d1e76e919cc0b2f3ca23ed1f5ef67a8#rd
1.示例代码
//打印出对应的i
void test(int i)
{
switch(i)
{
case 1:
printf("data is %d\n",i);
break;
case 2:
printf("data is %d\n",i);
//break;
case 3:
printf("data is %d\n",i);
break;
default:
break;
}
}
不说你也懂的,在case 2下面没有break,这与我们设计的初衷是不符的,那么switch有哪些缺乏呢,我们来总结一下
2.switch-case的缺点
语法正确,但是逻辑错误
写程序的时候忘记写break实在是再普通不过了,尤其是分类比较多的时候,因为从语法角度来说是正确的,所以比较容易忽视,可是代码的处理逻辑却是错误的!
死板的语法
switch对判断条件很严苛,case后面只能跟常量,其中的“表达式”的结果以及case后的“取值”只能是4种类型:byte、short、int和char,有些语言甚至只能用int类型作为判断条件,这种限制实在是太麻烦了。
这点解释说明一下,switch-case语句都可以转换成if-else
3.switch-case的优点
在很久以前,计算机科学家为了提高计算机的处理速度,把一些需要做逻辑判断的操作给固定死,然后只要查表就能做出相应的反应了。
比如说i=0的判断,switch在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执行就可以了。
说明:
我认为能用sitch-case就用switch-case吧,因为脉络比if-else清晰好多,最简单的当然是三元运算了
4.注意事项
- switch的break语句是可选的,即没有break,程序会继续执行后面的代码。
- default语句也是可选的,相当于对应if-else语句最后的else。
- switch语句的比较是从上往下,所以把匹配概率大的选择因子放在前面可以提高效率。
- 选择因子(case后面的数据)具有唯一性,即不能有2个相同的因子存在。
- default语句不论放在哪个地方,它都是在没有匹配的情况下才会去执行,也就是说case无论在什么情况下都会比default先执行