本文目錄一覽:
- 1、C語言實參求值順序。。。
- 2、C語言求值
- 3、c語言參數求值順序
C語言實參求值順序。。。
樓主fun(m+3,m++);與fun(m+3,++m);都是所謂「實現未定義的」
關於實現未定義,請參看我的另一篇回答:
本例中涉及函數調用前的參數求值順序,ANSI C又有規定:函數參數求值順序是不確定的,編譯器製造者可以隨意實現。大多數主流編譯器求值順序都是從右向左。你所使用的編譯器對這兩例語句輸出的結果表明它是從右向左求的。
fun(m+3,m++);中先求得m++,它返回m後編譯器有兩種選擇:一種先求得m+3再m自增,一種先自增再求得m+3。遺憾的是,這也是未定義的,編譯器可以隨意做出選擇。你的編譯器選擇了前者,得到的結果是8,5。
對後一個調用應該是沒什麼疑惑了。注意,疑惑都是產生於x++,像++x這種代碼是明明白白的。所以盡量不要在複雜表達式中用後置自增自減
C語言求值
nt WF(int x, int y){
x=x+y;//x=3+5=8
y+=x;//y=y+x;y=5+8=13
return x+y;//13+8=21
}
所以,第一題的結果是21
2.第一個LA計算的是數組的前三項和1+2+3=6,第二個是數組後三項的和3+4+5=12
所以輸出b的值為6+12=18
c語言參數求值順序
一直以來,++ –語法浪費了太多人的時間。說句實在話,++ — 在C語言中其實是一個很細節的語法,除了表達簡練外,真的沒有什麼其它的好處了。
由於中國的C語言教程長期以來被譚浩強主宰,而譚又錯誤的把++ –作為一個C語言重點來教,並增加了一些難點,把本來很簡單的語法,搞得複雜無比!
簡單的來說,++i 和 i++,在單獨使用時,就是 i=i+1。
而 a = ++i,相當於 i=i+1; a = i;
而 a = i++,相當於 a = i; i=i+1;
如果實在搞不明白++ –怎麼回事,那也不是什麼天塌下來的事。
因為a=++i完全可以寫成 i++; a=i。
a=i++完全可以寫成 a=i; i++。
而且,這也是一種好的程序風格:++ — 語句如非特殊需要,請單獨一行使用
原創文章,作者:MNRKK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325399.html