switch语句-穿透效果
2017-12-21 23:25 wild_cat 阅读(4516) 评论(0) 编辑 收藏 举报switch语句是我大学学c语言的一个痛点之一,现在拿来再看,终于理解了。
【c语言的switch语句是穿透的】这句是理解switch语句的关键:也就是说当程序判断某个case的条件为真后,它将在执行该case所带的的语句块之后,不再对后面的case的条件进行判断而直接执行。
测试程序(Java代码):
//switch System.out.println("test switch:"); char level='c'; switch(level){ case 'a': System.out.println('a'); case 'b': System.out.println('b'); case 'c': System.out.println('c'); case 'd': System.out.println('d'); default: System.out.println('end'); }
执行结果:
test switch:
c
d
end
【2018.4.10补充语义说明与图解】
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
图解:
————————————————————————————————————————————————————————————————
关于switch语句提前说明几点:
switch语句后面跟的 表达式的类型 必须是整型或可以转换为整型的表达式或类型:
- 可以放一个整型的变量 :int num = 10; switch (num)
- 可以放一个整形常量:switch (10)
- 可以放一个返回值是整型的表达式: switch (5+5),num = 5+5
- 还可以放可以转换为int类型的表达式:switch ('a') case 97
关于case 使用注意事项
case语句可以有多个
- case语句格式: case 常量表达式: (空格和冒号不能省)
- 可以是常量 case 10:
- 如果放表达式,那么只可以是常量表达式 case 5+5:
- default语句的位置可以任意放
- case的穿透问题,同样适用于 default
- 如果default语句放到 switch语句的最后,可以不加break
- 如果不是放到最后,是必须加上break的
- case 后面不能是实数 (单精度,双精度都不可以)
- case 语句之后,默认的第一句话不能定义变量
- 如果第一句话非要定义,应该加上大括号
以上内容参考http://blog.csdn.net/u013977285/article/details/47453159?locationNum=1&fps=1