-
1 # 科技九一哥
-
2 # 玩轉嵌入式
if和switch都是C語言中常用的條件判斷語句,兩者所實現的效果是一樣的,但是在應用、語法上不同,下面分別介紹。
if的用法if和else搭配一起使用,可以實現多個關係表示式的判別,常用的if結構有三種。第一種用法只有一個if判斷只用來判斷一個分支;第二種和一個esle配合使用,對關係表示式的兩層意思都做不同的語句表示式;第三種用法和多個else配合使用,用於多層判別,可以具有多個else if。三種用法的結構如下圖所示。
if else應用比較靈活,可以應用在較多的關係判別中,但是需要注意的是,if else必須能遍歷所有的可能值,否則容易導致bug,再有就是if括號中的關係表示式的結果必須是0或者1。
switch的用法switch和case一起使用,結束處用break終止。
switch case其實是一個跳轉表,只要case後面的內容和判別表示式的內容一致,就會順序執行後面的語句,直到遇到break後跳出,如果都不滿足條件,則執行default後面的語句。
switch case語句對跳轉分支較多的情況比較合適,會直接跳轉至滿足判別條件的分支處,分支越多,效率越高。
-
3 # 電子產品設計方案
if 和 switch 都是C語言的判斷語句
一般的場合使用 if 或者 switch 都可以達到相同的效果,但其實也是有很大的差異和優缺點的。
什麼時候使用if?if 顧名思義就是如果。如果條件成立就執行,如果只做簡單的判斷,使用 if 就可以
if 的使用比較靈活,判斷語言比較多時,還可以使用else if
else 可以用也可以不用,根據實際需要決定是否使用
因為程式是從上到下動行的,條件1不成立,就需要判斷條件2,條件3還不成立,還需要判斷條件3,如果條件比較多,佔用時間就相對較多。
什麼時候用switch?switch是選擇性跳轉語句,需要case和break配合一起使用;如果沒有break;執行完當前 case 語句後,還會繼續執行後面的 case 語句哦,直到break才會退出。
根據條件值,直接跳轉到執行語句,所佔用的執行時間較少;但case 後面的值必須是精確的固定值,不能像if 一樣判斷大小。所以switch的使用也有很多侷限性。
但使用switch 時,判斷的值必須是 int 或 enum 型別,因為case 後面的數值要精確匹配,浮點數是編譯不了的。
回覆列表
如果單從程式設計功能來看區別不大,能夠進行互相替換。但是邏輯上是不同的。用鑰匙開門舉例。
if語句是給你一把鑰匙,你要用這把鑰匙不斷的嘗試開門,直到開啟一扇門或者全部都打不開才結束。而switch則是直接告訴你這把鑰匙能開哪號房。
所以這也就決定了switch的鑰匙只能是鑰匙(常量),因為門牌號不可能允許五花八門。而if就不一樣了,鑰匙可以是樹枝或者別的亂七八糟的東西,只要能把門開啟就算OK。換句話說if的鑰匙只有兩種情況,不管你是斧頭加炸藥弄開的還是怎麼弄開的,只要手段有用(為真)就能開啟,否則手段沒用(為假)只能試試下一扇門。
從執行邏輯上來說區別很大,if需要不斷的去判斷真假。而switch責知道全部的值,只需要判斷一次,這也就使得if的時間複雜度高於switch,而空間複雜度低於switch,從執行表顯來看,if執行時間要大於switch,而需要的記憶體空間小於switch。還用鑰匙舉例。
if拿到鑰匙不知道也不管到底有多少間房,反正就一個勁試就對了,不知道啥時候是個頭,所以往往需要較長時間才能開啟正確的房間。而switch知道全部的房間在哪裡,拿到鑰匙一看門牌號就能電梯直達,省去可不斷試的過程,但是由於要了解全部的房間,因此記性不好可不行(儲存空間)。
好在現在某些編譯器很智慧,能夠根據使用者程式碼,硬體資源,自己使用者的最佳化等級,在編譯階段實現if和switch的轉換編譯,這樣就能在時間和空間上達到最好的狀態。