[爆卦]c語言運算子是什麼?優點缺點精華區懶人包

為什麼這篇c語言運算子鄉民發文收入到精華區:因為在c語言運算子這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者mike31830 ()看板Examination標題[課業] c語言 運算元時間Wed May...


int abc(int *k) {
*k += 4;
return 3 * ( *k) - 1;
}
void main() {
int i = 10, j = 10, result1, result2;
result1 = (i / 2) + abc( &i);
result2 = abc( &j) + (j / 2);
}
如果在運算式中的運算元估算的順序是由右到左,則result1,則result2的值為何?

看了補習班答案是 result1=48, result2=46

result1= (i/2) + abc(&i)
= (14/2) + 41 (*k=14; 3*14 - 1=41)
= 48

想問的是,為什麼在abc裹的計算是先乘除後加減呢
而不是由右到左推算呢
因為本題沒有提運算子優先權,是不是應該照題目要求一律從右到左呢

謝謝



--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 54.183.135.27
※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1494347053.A.F67.html
mike31830:轉錄至看板 Grad-ProbAsk 05/10 00:35
pisuke: 由右向左 跟 先乘除後加減 是兩回事吧 05/10 00:44
jachin: 所謂先乘除後加減,其實就是運算子的優先權順序,在程式定 05/10 07:56
jachin: 義時期就已經定義完成了,不管在哪裡計算都不會改變;而您 05/10 07:57
jachin: 說的由右而左的右結合,則是依編譯器決定,不同編譯器,可 05/10 07:57
jachin: 能有不同結合情形。 05/10 07:57
jachin: 簡單說,運算子優先權不用題目說,是必要條件。而由右而左 05/10 08:04
jachin: 是像a+b(先計算b,再計算a),且a/b的右結合,也是先計算b 05/10 08:04
jachin: ,再計算a,可是a/b的定義不會變呀,是程式定義的a除b。 05/10 08:04
assu: 答案錯 用程式實際跑 result1=46 result2=48 05/10 08:41
outofyou: 因為雖然先乘除後加減,但先計算右邊的運算元的值為何。 05/10 10:48
pisuke: 你知道你的編譯器是由左到右還是右到左嗎 05/10 12:55
pisuke: 這題本來就不能用實際程式的結果當答案啊 05/10 13:07
jachin: to assu大,這題就是要視編譯器而定,像一般pascal是由左 05/10 13:09
jachin: 而右,C是由右而左,但是如p大所言,實際仍視編譯器而定。 05/10 13:09
jachin: 考試時,可沒編譯器呀 05/10 13:09
pisuke: 我是覺得這題一樣先乘除後加減,只是右邊那個括號先做 然 05/10 13:38
pisuke: 後再算左邊的 05/10 13:38
pisuke: Btw 怎麼每年程式語言都出這種啊 冏 我記得板上對類似的題 05/10 13:39
pisuke: 目就有很多討論了 05/10 13:39
pt7441: 運算子 運算元 是不一樣的 05/10 13:48
lingpxs: 我的話 會先在答案第一行寫 依一般運算方式,相同優先權 05/11 21:21
lingpxs: 之運算以左結合為主 05/11 21:21

你可能也想看看

搜尋相關網站