看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): a++ 的意義是先執行整個敘述後再將a的值加一 (--是減一 ++a 的定義先把a加一後,在執行整個敘述 (同上 那為甚麼第八行的執行結果會是9? 預期的正確結果(Expected Output): a=9 a=9 請按任意鍵繼續.... 程式碼(Code):(請善用置底文網頁, 記得排版) 1 /*hw5_1a,運算式練習(一)*/ 2 #include<stdio.h> 3 #include<stdlib.h> 4 int main(void) 5 { 6 int a = 8; 7 printf("a=%d\n", ++a); 8 printf("a=%d\n", a--); 9 10 system("pause"); 11 return 0; 12 } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.14.67.39 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1463844132.A.83C.html
longlongint: a++再看一次 05/21 23:26
PanYX: 是把a--換成a++嗎? 剛剛試一下還是9 05/21 23:34
TWkobe: 你再打一個printf("a=%d\n", a); 05/21 23:35
TWkobe: 後綴--的副作用要到下一行你才看得到 05/21 23:36
bibo9901: 我怎麼覺得你"定義"寫反了? 05/21 23:36
※ 編輯: PanYX (101.14.67.39), 05/21/2016 23:45:35
bben900911: 做完再做+-,那當然+-後的結果該行看不到阿? 05/21 23:46
bben900911: 你嘗試在7~8 8~95之間直接檢查a。再研究看看 05/21 23:47
bben900911: 8~9* 05/21 23:47
PanYX: t大是寫在哪一行呢? 謝b大 改正了 05/21 23:48
PanYX: b大我試試 05/21 23:49
TWkobe: 你在printf("a=%d\n", a--);後面加上去就知道為什麼了 05/21 23:49
PanYX: 感恩各位解答 所以答案是a=9 a=8 這樣嗎? 05/21 23:57
TWkobe: 你在第七行的時候印出9此時的a也是9 第八行時先印出9 05/22 00:01
TWkobe: 印完9後副作用此時a才變成8 所以你在印一次a就會是8 05/22 00:02
PanYX: 嗚嗚 這個題目怎麼有點在弄新手阿 哈哈 還是我太淺 05/22 00:03
noodleT: operator 可以看作一個帶有返回值的函式,8,9兩行都會先 05/22 00:31
noodleT: 執行 ++,只差在返回值不同 05/22 00:31
noodleT: a++ 是先執行 a++ 喔,不是先做 printf ,只是 a++ 返回 05/22 00:34
noodleT: 的是舊值而已 05/22 00:34
art1: 回傳值 05/22 02:25
MOONRAKER: 一點都沒有弄到好嗎 現在人怎麼那麼容易被弄 05/22 12:09
MOONRAKER: 沒事就假設全世界人都要弄他 超棒DER 05/22 12:10
MOONRAKER: 都知道自己是新手 跟自己想的不一樣就要學起來懂嗎 05/22 12:11
MOONRAKER: 想不通就覺得別人[弄]你 那不要學阿 就不會被[弄]了啊 05/22 12:11
Caesar08: 實際上就是你太淺而已... 05/22 12:28
PanYX: moon大 開個小玩笑 別太認真 我也後面說我太淺啦 05/22 13:18
bibo9901: 不知道當初設計 ++/-- 是不是為了對應asm的 INC/DEC ? 05/22 14:16
PanYX: 我會吸取教訓 改進自己的!! 05/22 14:17
bibo9901: 以今日的角度看是滿搞人的沒錯 05/22 14:17
bibo9901: 至於那種跪在神像前批評別人不跪的 別理他沒關係 05/22 14:24
Schottky: @bibo9901 可以說是對應,但 INC 可沒有先加後加的問題 05/22 14:43
PanYX: b大 謝謝 了解了 05/22 14:47