[問題] ++問題

看板C_and_CPP作者 (wi)時間12年前 (2011/12/23 17:38), 編輯推噓7(7020)
留言27則, 13人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 程式中++a跟a++放在同一行 但是++a是那行程式執行完才+1 為何秀出的結果為4 餵入的資料(Input): 預期的正確結果(Expected Output): 3 錯誤結果(Wrong Output): 4 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/OFmwZ 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.125.20.92

12/23 17:43, , 1F
置底第八誡...
12/23 17:43, 1F

12/23 18:07, , 2F
但我不太懂的是++放在後面不是應該是執行完此行
12/23 18:07, 2F

12/23 18:09, , 3F
所以怎麼會產生未定義行為
12/23 18:09, 3F

12/23 18:14, , 4F
疑? 不是本來就是4 @@
12/23 18:14, 4F

12/23 18:15, , 5F
post-fix ++/-- 的意思 *不是* 此行後才+1/-1
12/23 18:15, 5F

12/23 18:16, , 6F
而是 evaluate 為 increment 前或後的值
12/23 18:16, 6F

12/23 18:16, , 7F
什麼時候做 increment 是以 operator precedence 決定
12/23 18:16, 7F

12/23 18:24, , 8F
所以這個就是未定義行為摟
12/23 18:24, 8F

12/23 18:28, , 9F
assign的優先權是最低的嗎?比那些evaluate還低?
12/23 18:28, 9F

12/23 19:13, , 10F
這題上次皮卡丘有出,莫非兄弟您也去那面試了?
12/23 19:13, 10F

12/23 19:49, , 11F
學長問我的xd我一開使也是認為說是未定義行為,看是
12/23 19:49, 11F

12/23 19:50, , 12F
但是看到有前後++就覺得很奇怪搞不懂= =
12/23 19:50, 12F

12/23 21:08, , 13F
日經文
12/23 21:08, 13F

12/23 23:02, , 14F
在 C 的世界裡面 ++ 跟 assign 是兩回事
12/23 23:02, 14F

12/23 23:03, , 15F
良心建議不用浪費生命了解可以輕鬆避開的寫法......
12/23 23:03, 15F

12/23 23:12, , 16F
行數愈多愈帥不知道嗎?
12/23 23:12, 16F

12/23 23:42, , 17F
請問如果在前面加上static的結果是多少?
12/23 23:42, 17F

12/23 23:44, , 18F
樓上可以試試看就知道了
12/23 23:44, 18F

12/23 23:48, , 19F
我剛剛就試過拉,我只是想問為什麼
12/23 23:48, 19F

12/23 23:52, , 20F
為什麼要用static?
12/23 23:52, 20F

12/24 10:20, , 21F
為什麼大家都不看置底文??? 那可以幫助自己知識大跳躍
12/24 10:20, 21F

12/24 21:39, , 22F
這種題目連HTC都出一堆哩XDD
12/24 21:39, 22F

12/24 21:51, , 23F
看來我的問題應該是一直以為++放後面就是等到下一行
12/24 21:51, 23F

12/25 10:31, , 24F
你的問題是...你還不去搞懂大家為何強調第八誡
12/25 10:31, 24F

12/25 10:33, , 25F
實際上c/c++並沒有規定運算結果一定要由左到右.
12/25 10:33, 25F

12/25 10:34, , 26F
就算特意加上括號,優先權也不會變成由左道又去運算
12/25 10:34, 26F

12/25 13:29, , 27F
想通了!感謝指教
12/25 13:29, 27F
文章代碼(AID): #1Ez4mbnz (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Ez4mbnz (C_and_CPP)