作者yaerse (寂寞時就擁著書本吧)
看板java
標題[問題] 關於(i++)與(++i)
時間Sun Jan 18 01:20:16 2015
在程式例題中看到
i=5;
j1=0;
j2=0;
j1=(i++)+5;
i=5; <--此行經ClareQ的提醒,補加入 :)
j2=(++i)+5;
---------------
輸出結果
j1=10;
j2=11;
-------
很納悶的地方是
明明括號的優先權是最高的,
故小弟的想法是(i++)與(++i)應該都是6,
也就是都會先處理i=i+1的部分
然後再處理後面+5的部分
但輸出結果並非如此
不知小弟的想法何處錯誤呢?
--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.116.63
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1421515218.A.5D8.html
1F:→ Chikei: 因為兩個op的return value不一樣,不要把(i++) (++i)當做 01/18 01:37
2F:→ Chikei: 對i作處理後再回傳i,把它想成一個吃i的function,函數內 01/18 01:39
3F:→ ClareQ: 前面j1賦值後i==6,之後j2=7+5=12,所以j2==12才對吧:P 01/18 01:40
4F:→ Chikei: 會修改i那個變數,但是回傳值只跟傳入時的值有關 01/18 01:40
5F:→ yaerse: 回ClareQ,我少掉一行重新設定i=5; :P 01/18 02:10
※ 編輯: yaerse (123.194.116.63), 01/18/2015 02:11:32
6F:→ yaerse: 先感恩Ckikei大的回覆,不過您的說法,小弟還是無法理解 01/18 02:14
7F:→ yaerse: 第一句,"兩個op的return value不一樣"..此兩個op是指?? 01/18 02:15
8F:→ Killercat: op = operator, ++i/i++分別是一種op 01/18 03:25
9F:→ Killercat: 前者return value是i+1 後者是i 是不一樣的 01/18 03:26
10F:推 Kenqr: 把++i和i++想成是兩個函數,這兩個函數都會把i的值+1 01/18 11:52
11F:→ Kenqr: ++i會回傳i+1,i++會回傳i 01/18 11:53
12F:推 longlongint: 把它看作兩行 01/19 00:33
13F:→ longlongint: j1=I+5 01/19 00:34
14F:→ longlongint: i=i+1 01/19 00:34
15F:→ lineok: i++ 為後序遞增,故先做賦值,再做++ / ++i 則先做++再做賦 01/30 00:11
16F:→ adrianshum: 樓上錯誤。Chikei 的解釋才是正確觀念 02/01 17:22
17F:→ wkt: i++回傳值為i,++i回傳值為i+1 02/07 21:37