第一段代碼:

創新互聯主營蘇尼特右網站建設的網絡公司,主營網站建設方案,成都app開發,蘇尼特右h5微信平臺小程序開發搭建,蘇尼特右網站營銷推廣歡迎蘇尼特右等地區企業咨詢
++i是先增加i的值,然后使用。
p=f(i,++i); 是先執行++i,后進行函數調用。因為執行了++i以后,i的值已經變成了3,
所以相當于p=f(3,3);
你可以在函數f里面把a和b的值打印出來,你會發現a和b都是3.
第二段代碼:
i++是先使用i的值,然后把i的值加1.
所以相當于先執行p=f(2,2);
執行之后,把i的值變成3.答案應該是0.
我懷疑你們老師的課件寫錯了,建議你去問問他。
(1)printf("%d", i++); 后綴,表達式里用 i, 出了表達式 自增1,故,分解為: printf("%d", i); i=i+1;
(2) printf("%d", ++i); 前綴,先自增,后用于表達式,故,分解為: i=i+1; printf("%d", i);
(3)(4) 同理,printf("%d", i--); 分解為:printf("%d", i); i=i-1;
printf("%d", --i); 分解為: i=i-1; printf("%d", i);
把分解后的語句組合起來,就可看出,輸出為 40 42 42 40
編譯器的不同 結果可能不同~~
p(i,++i)
有的傳遞的參數是2,3
有的傳遞的參數是3,3
運算順序從左至右和從右至左~~
如果傳遞的參數是2,3 那么返回值為-1 如果傳遞的參數是3,3 那么返回0
x=5
-----
++x 6 x=6
--x 5 x=5
x++ 5 x=6
x-- 6 x=5
-x++ -5 x=6
-x-- -6 x=5
-----
我們把它們當成函數調用的形式來看,會比較好理解。i做為參數傳入,
在(++i,--i中,++,--做為前綴運算符),表達式的值為i+1或i-1.返回值為i+1或i-1.
在(i++,i--中,++,--做為后綴運算符),表達式的值為i,返回值為i+1或i-1.
看到有什么不同了嗎?
在++,--做為前綴運算符式,改變表達式的值,而作為后綴運算符時,表達式值不變。
共同點是,無論做前綴或后綴,返回值都自加或自減。
---------------------
....
int x=5; // x初始化值為5
printf("%d,",++x); // x=5,打印++x的值,++x的值為x+1 (5+1=6),返回值x+1,x=6
printf("%d,",--x"); // x=6,打印--x的值,--x的值為x-1 (6-1=5),返回值x-1,x=5
printf("%d,",x++); // x=5,打印x++的值, x++的值為x (5) ,返回值x+1,x=6
printf("%d,",x--); // x=6,打印x--的值, x--的值為x (6) ,返回值x-1,x=5
printf("%d,",-x++); // x=5,打印-x++的值, x++的值為x (5) -x=-5 ,返回值x+1,x=6
printf("%d,",-x--); // x=6,打印-x--的值, x--的值為x (6) -x=-6 ,返回值x-1,x=5
【表達式的值】 【返回的值】
....
ps:表達式的值和返回的值是兩個概念,-x++,-x--可看做-(x++),-(x--).++,--的優先級高于+,-
C語言中區分前自增與后自增,它們都有副作用,尤其是后自增。
前自增可能更好一點,它不產生臨時變量,效率更高一些。
++y相當于:y=y+1;在變量的使用之前先自增。
y++相當于:y; 其它語句... y=y+1;也就是使用它時,它的值不變,在其使用之后的某一時刻但在再次使用它前其值加一。而且不同的編譯器不一定有一致的實現行為。
a=(y++)+(y++)+(y++) 這是一條語句,通常的編譯器實現會將此語句一次性掃描完成。這種情況下,y++會保持其值不變,此語句完成后,將y的值遞增3次。
網站題目:C語言自增符號做函數參數 C語言中自增
轉載來源:http://www.yijiale78.com/article12/dodsigc.html
成都網站建設公司_創新互聯,為您提供微信公眾號、手機網站建設、網頁設計公司、微信小程序、軟件開發、響應式網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯