C語言也會短路?盤點C語言中那些令人匪夷所思的情況!


丨短路現象 1

比如有以下表達式

a && b && c

只有a為真(非0)才需要判斷b的值;只有a和b都為真,才需要判斷c的值。

▓ 舉例

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

main()

{

    int a,b,c,d;

       a = 0;

       b = 1;

       c = 2;

       d = a++ && b++ && --c;

    printf("a=%d b=%d c=%d d=%d\n",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()

{

    int a,b,c,d;

        a = 0;

        b = 1;

        c = 2;

        d = a++ || b++ || --c;

    printf("a=%d b=%d c=%d d=%d\n",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。

執行結果:


 

————————————————

- End -

不管你是轉行也好,初學也罷,進階也可,如果你想學編程,進階程序員~+

【值得關注】我的 編程學習交流俱樂部 !【點擊進入】

C語言入門資料(網盤鏈接免費分享):


 

C語言推薦書籍(PDF免費分享):


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM