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
