作者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/cn.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