【轉載】http://hi.baidu.com/dannie007zxl/item/5d0c3185577df719c3162724
有的時候,我們對身旁自認為熟悉的東西,卻發現很難去給出准確的回答。
習慣了程序在腦袋中自上向下的執行,默認程序也是如此。
學習switch語句的時候,接受下面這樣的程序:
//Code1
switch(a) { case 1: printf("one"); break; case 2: printf("2"); break; default: printf("default"); break; } /** 輸出結果 **************** a=1 時 輸出 one a=2 時 輸出 two a=3 時 輸出 default ****************************/
從學switch起,就被教育 【default 是放在最后的】,從來沒去質疑過這種說法。
switch中的default一定要在最后嗎?答案是否定的。
那么,下面的執行結果又是什么呢?
//Code2
switch(a) { case 1: printf("one"); break; default: printf("default"); break; case 2: printf("2"); break; } /** 輸出結果 **************** a=1 時 輸出 one a=2 時 輸出 two a=3 時 輸出 default ****************************/
結論是是Code2 與 Code1的結果是相同的,同理即使把default放在第一個位置上,結果也是相同的。
再看一個
//Code3
switch(a) { case 1: printf("one"); break; default: printf("default"); // break;
case 2: printf("2"); break; } /** 輸出結果 **************** a=1 時 輸出 one a=2 時 輸出 two a=3 時 輸出 default2 ★多了一個2 ****************************/
【結論】
1.default是在case全都不匹配的情況。
2.default放在任意的位置都可以。
3.沒有匹配值的時候default就是進入點,進入default以后會和普通進入點一樣,如果沒有break繼續執行下面語句。
Microsoft Visual C++和Borland的編譯器都是采用二分查找方法來檢測case的各種情況,所以這個switch的case和default執行順序是與編譯器有關的。
