代码改变世界

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语句后面跟的 表达式的类型 必须是整型或可以转换为整型的表达式或类型:

  1.    可以放一个整型的变量 :int num = 10;  switch (num)
  2.     可以放一个整形常量:switch (10)
  3.     可以放一个返回值是整型的表达式: switch (5+5),num = 5+5
  4.     还可以放可以转换为int类型的表达式:switch ('a')   case 97

关于case  使用注意事项
case语句可以有多个

  1. case语句格式: case  常量表达式: (空格和冒号不能省)
  2.   可以是常量  case 10:
  3.   如果放表达式,那么只可以是常量表达式 case 5+5:
  4.   default语句的位置可以任意放
  5.   case的穿透问题,同样适用于 default
  6.   如果default语句放到 switch语句的最后,可以不加break
  7.   如果不是放到最后,是必须加上break的
  8.   case 后面不能是实数  (单精度,双精度都不可以)
  9.   case 语句之后,默认的第一句话不能定义变量
  10.   如果第一句话非要定义,应该加上大括号

以上内容参考http://blog.csdn.net/u013977285/article/details/47453159?locationNum=1&fps=1