Re: [問題] i++,++i
※ 引述《sjrom.bbs@ptt.cc (淡淡的藍)》之銘言:
> 程式如下
> main()
> {
> int i=5,j=5,p,q;
> p=(i++)+(i++)+(i++)+(++i)+(++i);
> q=(++j)+(++j)+(++j));
> printf("%d\n,%d\n,%d\n,%d\n",p,q,i,j); //28,22,10,8
> }
> 註解是印出來的值,如果是
> p=(i++)+(i++)+(i++); //p的值是 15
> ↑這個可以理解,可用這個想法來想++i,卻解不出上面的答案
> 這和compile有關嗎? 我用vc6跑的.
好像每年都會看到這種問題文章,而且每次回應時候都會把
這類問題鞭策過才可以。
這類寫法老實說 c 裡面應該沒有明確規範解釋的順序方式,
所以就留給各家 compiler 自行決定。
我想學 c 的人把 i++ 與 ++i 的差異弄清楚就可以了,實在
沒有必要寫這種奇怪的程式碼。
另外還看過這種:
int num;
printf("%d\n", num + (num = 100));
看完我感覺我很想打這個寫 code 的人。
以外印象中這類 code 老實說也感覺不是很明確:
(*ptr++) ? (*ptr++) : 0
myfunc1(i++) + myfunc2(i++)
多年的討論,我想最後都會有如下的結果回應:
1. 若是是學校 homework,表示授課教師可能....(自行猜想)
2. 若是在工作地方寫這程式會被主管鞭策一頓
若你真的對你用的 compiler 解釋方式有興趣,建議把程式碼轉成
assembly language 後,看 asm code 會知道比較細部流程。
--
如果真的愛一個作業系統 怎能不害怕不再能使用它 而我們必須接受現實
於是長大了 寂寞就是沒有了機會再用它 比沒有電腦還要寂寞
而那些點亮我們生命的作業系統 就彷彿電影中發生在暹邏的愛情故事
即使短暫使用也會刻骨銘心
To all the Linux that bring us to kernel.
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: kendlee.sayya.org
推
11/26 19:44, , 1F
11/26 19:44, 1F
討論串 (同標題文章)