C語言中的短路現象

2022-01-10 00:00:25 字數 777 閱讀 9629

比如有以下表示式

a && b && c
只有a為真(非0)才需要判斷b的值;

只有a和b都為真,才需要判斷c的值。

求最終a、b、c、d的值。

main()

因為a++是先判斷a的值再自加,而a初始值為0, 所以(a++)為假,由短路現象可知&&後面式子b++和--c就都不會執行;

對於賦值語句,是先將a的值賦值給d,然後再自加,所以d的值為0,a最終為1。

執行結果:

比如有以下表示式

a || b || c
只要a為真(非0)就不必判斷b和c;

只有a為假,才需要判斷b的值;

只有a和b都為假,才有必要判斷c的值。

求最終a、b、c、d的值;

main()

因為a++是先判斷a的值再自加,而a初始值為0, 所以(a++)為假,由短路現象可知,還需要繼續判斷 || 後面的表示式b++,b++要先判斷b的值,b為1,所以b++為真,由短路現象可知,後面的式子--c就不在執行;

對於賦值語句,不再是將a的值賦值給d,而是將b先賦值給d然後a和b再自加,所以d的值為1,a最終為1,b最終為2。

執行結果:

C語言中短路求值問題

以下表示式就是短路現象的其中一種 x y z 如果x為假,直接返回假 若x為真,則執行y 只有x和y都為真才執行z。我們來看以下 求想x,y,z和b的值。include include intmain 這裡我們執行到bool b x y z 這條語句時,編譯器會先執行x 因為x 是後置 得等到整條語...

C語言中陣列越界訪問造成死迴圈現象

本篇文章純屬娛樂,沒太多技術性的東西。只是我覺得還比較有意思,所以記一下!大俠請繞道!include int main int argc,char argv printf program is end n return 0 很顯然,在本段 中,出現了乙個越界操作的問題。不過幸運的是,編譯還是通得過的...

回文現象(C語言)

英文中有很多的回文詞,回文詞的拼法十分有趣,無論是從前往後拼讀,還是從後往前拼讀,他們的拼法和詞義都不變。例如 dad 爸爸 mum 媽媽 noon 中午 eve 前夕 eye 眼睛 pop 流行 deed 行為 level 水平 等。簡單地說,回文 就是指順讀和倒讀都一樣的字串。現在請你程式設計輸...