作者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/cn.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