作者sinker5566 (伸卡56)
看板C_and_CPP
標題[問題] ++ 與陣列的問題
時間Wed Mar 8 07:56:09 2017
小弟CPP程式新手
想請問各位一個++與陣列搭配的問題
code如下
#include<iostream>
int main()
{
int a[3]={0,0,0};
int x=2;
a[x++] = --x;
for(int i=0;i<3;i++)
cout<<a[i];
system("PAUSE");
return 0;
}
我用dev c++ 跟code::blocks
執行出來的結果都是002
用的compiler是gcc v5.3
但是同學用code::blocks
編譯完相同的code
結果是010
想請問各位大大怎麼看這段碼?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.69.65
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1488930972.A.1B2.html
1F:推 jerryh001: 未定義行為 結案 03/08 08:27
2F:→ loveflames: 問我怎麼看,我只會說題目爛死了 03/08 08:46
3F:→ testPtt: 看asm碼比較看看 03/08 09:08
4F:→ loveflames: 未定義行為看ASM沒意義 03/08 09:33
5F:推 b0920075: 佔版面吧 03/08 11:33
6F:推 stupid0319: 跟雞生蛋問題一樣,自找麻煩 03/08 11:44
7F:推 Zero0910: 去把置底13誡的第8點背起來 XD 03/08 11:55
8F:推 loveflames: 很多老師喜歡教這個來害人 03/08 12:01
9F:推 Sidney0503: 雖然是十三誡 C++17好像會規範 等三年後就有固定答案 03/08 12:09
10F:推 steve1012: 到底為啥要這樣寫lol百思不解 03/08 12:12
11F:推 devilstan: a[x++] = --x; 幹嘛這樣寫? 03/08 13:01
12F:推 LPH66: C++17 不是已經在眼前了嗎... 03/08 13:19
13F:推 soheadsome: "c++17為啥要三年後 今年不是2017了嗎... 03/08 13:29
14F:推 Neisseria: 這樣寫程式碼比較緊湊啊 (誤超大) 03/08 13:51
15F:推 asd456fgh778: 沒意義XD 03/08 14:19
16F:→ Caesar08: 17的規定是右邊先執行,再來才是左邊 03/08 14:19
17F:→ loveflames: 關鍵字是什麼?想查一下規格 03/08 14:21
18F:推 Sirctal: 回soheadsome 是等C++20?? 03/08 14:34
19F:→ Caesar08: p0145r2是那個提案的編號 03/08 14:35
20F:→ Caesar08: 剛看了一下,有p0145r3的更新版本 03/08 14:38
21F:→ HolyBugTw: 20年前左右的PL曾經說過部分compiler會先處理右邊 03/08 15:36
22F:→ HolyBugTw: 所以那一行等同 x=1; a[1]=x; x=2 03/08 15:38
23F:→ HolyBugTw: PL => programming languages 03/08 15:39
24F:推 Zero0910: 因為是未定義啊 所以有先處理右邊的compiler 也會有左邊 03/08 15:46
25F:→ Zero0910: 先取值的compiler 03/08 15:46
26F:推 wtchen: 到底哪個老師亂教這種東西.... 03/08 19:36
27F:→ OctupusTea: 這是「未定義行為」,會因為編譯器和系統不同而有不 03/09 14:18
28F:→ OctupusTea: 同的結果 03/09 14:18