大家好,我是bug菌~ C語言短路現象算是C語言的基礎吧,不過有時候代碼寫得不規范也容易引入一些bug,所以這些操作在工程師實踐中盡量少用。 雖然下面找的例子比較簡單,但如果后面是其他表達式,或許你并不會那么容易分辨。并且,你可能會斬釘截鐵的說,我絕對不會這樣編寫我的代碼,但你確定的同事不會這樣?你的前同事不會? 好了,下面的案例來源于網絡,僅供參考: 短路現象1 比如有以下表達式:
a&&b&&c 只有a為真(非0)才需要判斷b的值;只有a和b都為真,才需要判斷c的值。
舉例
求最終a、b、c、d的值。
main() { inta,b,c,d; a=0; b=1; c=2; d=a++&&b++&&--c; printf("a=%db=%dc=%dd=%d ",a,b,c,d); } 因為a++是先判斷a的值再自加,而a初始值為0, 所以(a++)為假,由短路現象可知&&后面式子b++和--c就都不會執行;對于賦值語句,是先將a的值賦值給d,然后再自加,所以d的值為0,a最終為1。 執行結果:
短路現象2
比如有以下表達式:
a||b||c 只要a為真(非0)就不必判斷b和c;只有a為假,才需要判斷b的值;只有a和b都為假,才有必要判斷c的值。
舉例
求最終a、b、c、d的值;
main() { inta,b,c,d; a=0; b=1; c=2; d=a++||b++||--c; printf("a=%db=%dc=%dd=%d ",a,b,c,d); } 因為a++是先判斷a的值再自加,而a初始值為0, 所以(a++)為假,由短路現象可知,還需要繼續判斷 || 后面的表達式b++,b++要先判斷b的值,b為1,所以b++為真,由短路現象可知,后面的式子--c就不在執行;對于賦值語句,不再是將a的值賦值給d,而是將b先賦值給d然后a和b再自加,所以d的值為1,a最終為1,b最終為2。 執行結果:
編輯:黃飛
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
短路
+關注
關注
5文章
532瀏覽量
31013 -
C語言
+關注
關注
180文章
7604瀏覽量
136696
原文標題:簡單但容易掉坑,C語言所謂的短路現象
文章出處:【微信號:最后一個bug,微信公眾號:最后一個bug】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言中for循環的用法和應用 C語言中for循環與while循環的區別
C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
發表于 08-18 16:33
?3228次閱讀
C語言中的短路現象
短路現象1 比如有以下表達式 abc 只有a為真(非0)才需要判斷b的值;只有a和b都為真,才需要判斷c的值。 舉例 求最終a、b、c、d的值。 main() { inta,b,
scanf在C語言中的作用
scanf在C語言中的作用? scanf是C語言中的輸入函數,用于從標準輸入設備(如鍵盤)讀取數據,并將其存儲到變量中。它是C
C語言中的socket編程基礎
Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
評論