Re: [問題] 請問這個小程式的執行結果??
看板C_and_CPP (C/C++)作者changyuheng (張昱珩)時間13年前 (2012/10/03 00:18)推噓5(5推 0噓 19→)留言24則, 11人參與討論串2/3 (看更多)
算式應該是反序 parse 進 stack,
上面這句修正一下,應該是順序的 parse 進 stack,在 pop 出來時會造成後面先算
所以
1. ++a 讓 a = 2
2. a++ 告訴 a 在完成值的傳遞後要 +1
↓
b = (2) + (2);
a = 3
上面的說法可以由下列式子驗證:
(a++) + (++a) * 2
※ 引述《winout0112 (阿普)》之銘言:
: int a=1;
: int b = (a++) + (++a);
: b=?
: 結果 b=4
: 就我認知,當complier執行(a++)時,會把a的值先給出去,然後在此行
: 結束後,才幫a進行加一的動作不是嗎?
: 所以整個算式應為
: b=1+(1+1);
: 請糾正,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.224.169.212
推
10/03 00:22, , 1F
10/03 00:22, 1F
推
10/03 00:30, , 2F
10/03 00:30, 2F
推
10/03 00:30, , 3F
10/03 00:30, 3F
請問為什麼錯?
→
10/03 00:31, , 4F
10/03 00:31, 4F
→
10/03 00:31, , 5F
10/03 00:31, 5F
→
10/03 00:34, , 6F
10/03 00:34, 6F
→
10/03 00:35, , 7F
10/03 00:35, 7F
→
10/03 00:37, , 8F
10/03 00:37, 8F
→
10/03 00:37, , 9F
10/03 00:37, 9F
→
10/03 00:37, , 10F
10/03 00:37, 10F
→
10/03 00:38, , 11F
10/03 00:38, 11F
→
10/03 00:41, , 12F
10/03 00:41, 12F
→
10/03 00:42, , 13F
10/03 00:42, 13F
我沒有要爭論定義,
純粹回答原 po:「為什麼是 4?」
→
10/03 00:55, , 14F
10/03 00:55, 14F
推
10/03 00:56, , 15F
10/03 00:56, 15F
→
10/03 00:56, , 16F
10/03 00:56, 16F
→
10/03 01:01, , 17F
10/03 01:01, 17F
→
10/03 04:43, , 18F
10/03 04:43, 18F
在 compile time,成組語時已為此順序,可能因 infix to prefix 較方便故如此
→
10/03 09:03, , 19F
10/03 09:03, 19F
→
10/03 09:03, , 20F
10/03 09:03, 20F
gcc 4.6.3
STANDARD: c89/c99/c1x/gnu89/gnu99/gnu1x
gcc -std=STANDARD INFILE
※ 編輯: changyuheng 來自: 42.73.134.253 (10/03 10:09)
→
10/03 11:52, , 21F
10/03 11:52, 21F
→
10/03 11:55, , 22F
10/03 11:55, 22F
→
10/03 11:55, , 23F
10/03 11:55, 23F
推
10/03 12:00, , 24F
10/03 12:00, 24F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章