C語言自加自減的問題

以下i的初值都爲2
1、num = (++ i) + (++i) + (++i) + (++i);
計算順序:  
                i= i + 1               ---->i = 3
                i= i + 1               ---->i = 4
                num = i + i        ---->num = 4 + 4 = 8
                i = i + 1              ---->i = 5
                num = num + i ---->num = 8 + 5 = 13
                i = i + 1              ---->i = 6
                num = num + i; --->num = 13 + 6 = 19
2、i= i *((i ++) + (++i))
計算順序:
                由於括號中i++一開始不要自加,所以先算++i
                ++i                    ---->i = 3
                (i++) + (++i) = 3 + 3 = 6    
                i * ((i++) + (++i)) = 3 * 6 = 18
                i +1=19
3、num = (i++) + (++i) + (i++) + (++i)
計算順序:
                num = (i++) + (++i)    ---->num = 3 + 3 = 6(先算++i,i= 3,然後再算num = (i++) + (++i)) 
                num =  num + (i ++)= 6 + 3 = 9
                num = num + (++i) = 9 + 4 = 13
                num = 13 + 1 + 1=15(遇到逗號結束,調用之前的i++進行兩次自加)
4、void func(int m,int n)
     {
        printf("m = %d",m);
        printf("m = %d",n);
     }
     int main()
     {
        int i = 2;
        func(i ++,++i);
        return 0;
     }
***************************************************

函數調用自加時候的作用規則:

1>函數從右邊開始傳遞參數
2>i++被替換爲數值,++i被替換爲變量名
3>分號、函數調用左邊的括號、逗號都爲結束標誌
***************************************************
計算順序:
                ++i    ---->i作爲變量不進行值傳遞,只是進行自加,i= 3
                ++i    ---->i作爲變量不進行值傳遞,只是進行自加,i= 4
                輸出4,4
5、程序修改爲:func(i ++,i ++)
計算順序:
                i先作爲值傳遞到函數中輸出2
                然後遇到逗號,即結束標誌,i自加變爲3,
                i作爲值傳遞到函數中輸出3
                i再自加變爲4
6、再修改爲:func(i++,i,++i,i++)
計算順序:
                i先作爲值傳遞值函數,輸出2
                i遇到逗號自加,i的值變爲3
                i先自加變爲4,不過是以變量的形式存在,不傳遞值函數輸出
                i作爲一個變量不輸出,此時i的值爲4
                i作爲值的形式輸出,輸出爲4,而後i的值自加變爲5
發佈了47 篇原創文章 · 獲贊 31 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章