關於switch的用法這裡不再做什麼總結了,其實這個是乙個便捷的快速跳轉條件切換器。而關於這個功能最常用的技術討論點在於case後面的break以及default。這裡不討論這些,直接看下面的**:
#include"stdio.h"
int main(void)
int num = 0;
switch(num)
printf("functionrun!\n");
return 0;
上面的**中用到了乙個switch,但是**塊中沒有任何case以及default。**語法有問題嗎?編譯一下如下:
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>gcc switch.c
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>
由上面的結果可以看到,編譯沒有任何問題。那麼執行會是什麼狀態呢?會把這個唯一的printf執行輸出相應的語句?執行如下:
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>a
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>
如此看,就有點詭異了。這個printf語句是沒有執行到的!也就是說,switch語句中的**執行必須得有case標籤指示**的入口。這種行為很讓人聯想到一種情況的程式執行結果,**如下:
#include"stdio.h"
int main(void)
int num = 0;
switch(num)
int i = 123;
printf("functionrun!\n");
default:
printf("value of iis:%d\n",i);
break;
return 0;
**是在之前的**中修改的,**的第二個printf會執行,可是執行的時候i的數值是多少呢?從之前的測試可以看出,區域性變數後面的**是沒有執行過的,那麼我這個i在每次函式執行到這裡的時候會每次動態性初始化嗎?**編譯執行結果:
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>gcc switch.c
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>a
value of i is:2
e:\workspace\02_技術實踐\01_程式語言\01_c語言\02_c和指標\switch>
從上面的結果可以得出兩個結論:
1,**塊中的宣告定義是起作用的;
2,i的數值不是123證明這部分的區域性變數並沒有進行每次的動態初始化。
說起來這也是夠奇怪的乙個特點,印象中之前看《c專家程式設計》的時候似乎看到過乙個類似的描述,但是那時候c語言的水平看《c專家程式設計》一點也看不懂。只是留下了乙個模模糊糊的印象,至於是否是乙個問題,有空還是得會去查查。
初學C語言之 switch的使用
如題 五分制計分 switch語句的方便之處在於可以新增無限的分支,避免了使用分支較多時使用if語句陷入多重巢狀邏輯混亂的尷尬境地。但其不便之處在於switch 表示式 表示式的值必須為整型或字元型,且case後的常量表示式也必須是整型常量或字元型常量。那麼使用時候要格外靈活,通過變化來達到常量表示...
C語言switch語句
switch語句 switch 表示式 case 常量表示式 1 語句1 case 常量表示式 2 語句2 case 常量表示式 n 語句n default 語句 n 1 說明 1 switch後面括號內的表示式,其值可以使整形 字元型 列舉型資料 2 應該在執行乙個case 分支後,使流程跳出 s...
C語言switch語句
既然有了if else 組合為什麼還需要switch case 組合呢?那你既然有了菜刀為什麼還需要水果刀呢?你總不能扛著雲長的青龍偃月刀 又名冷豔鋸 去削蘋果吧。如果你真能做到,關二爺也會佩服你的。if else 一般表示兩個分支或是巢狀表示少量的分支,但如果分支很多的話 還是用switch ca...