BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #61508同步于 2012/4/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[合集] 腾讯笔试题 自增运算a=a++;

shenlei
2012/4/13镜像同步0 回复
☆─────────────────────────────────────☆ zhaohuanshi (召唤师) 于 (Thu Apr 12 14:25:53 2012) 提到: =======================只有一个++ (1)int a=4; a=a++; printf("%d",a); (2)int a=4;int b; b=a+(a++); printf("%d %d",a,b); (3)int a=4; a=a+(a++); printf("%d",a); =============================以下不喜误入 (4)int a=4;int b; ++a=++a+(a++); printf("%d",a); (5)int a=4;int b; ++a+=(a++); printf("%d",a);(4)(5)两题答案一样吗? ☆─────────────────────────────────────☆ buptrh (emi大婶) 于 (Thu Apr 12 14:29:13 2012) 提到: 1、5 2、5 8 3、9 4、13 5、11 纯瞎猜的。 ☆─────────────────────────────────────☆ zhaohuanshi (召唤师) 于 (Thu Apr 12 14:34:41 2012) 提到: 调试了一下第一题是4啊,为什么?++在后面到底是赋值完了再++,还是什么 ☆─────────────────────────────────────☆ buptrh (emi大婶) 于 (Thu Apr 12 14:35:32 2012) 提到: 我觉得第1题是,a=a;a++;这样。。猜的。 结果很可能和编译器有关,讨论这样的问题没意义。 ☆─────────────────────────────────────☆ xurongfei (hero) 于 (Thu Apr 12 14:38:34 2012) 提到: 1、5 2、5 8 3、9 4、13 5、11 我也算来是上面的。不知道对不对 ☆─────────────────────────────────────☆ xurongfei (hero) 于 (Thu Apr 12 14:47:07 2012) 提到: 【 在 buptrh 的大作中提到: 】 : 我觉得第1题是,a=a;a++;这样。。猜的。 : 结果很可能和编译器有关,讨论这样的问题没意义。 the c programming language 说, n++ increments n after its value has been used ☆─────────────────────────────────────☆ buptrh (emi大婶) 于 (Thu Apr 12 14:48:19 2012) 提到: 那就应该是对了。 【 在 xurongfei 的大作中提到: 】 : the c programming language 说, : n++ increments n after its value has been used ☆─────────────────────────────────────☆ saman (一入奶门神似海) 于 (Thu Apr 12 16:18:06 2012) 提到: 不是和编译器相关么? LS的就这么肯定了么? 这种 未定义行为 作笔试题,总有种想哭的冲动。。。 不过VC下倒是5 5 8 9 ☆─────────────────────────────────────☆ muyinvna (【意涵团】重生) 于 (Thu Apr 12 17:30:26 2012) 提到: c++中对这种在一个表达式中会有副作用的行为,采取未定义,也就是需要编译器按自己的做法去实现!跟具体编译器的策略有关系。 以我的理解,咱们在遇到这种问答题时,可以直接说:c++未定义此种行为,不同编译器不同答案 ☆─────────────────────────────────────☆ a206206 (最爱大白腿|肉丝控) 于 (Thu Apr 12 17:43:07 2012) 提到: 狗日的tx。。。 ☆─────────────────────────────────────☆ brucesnow (snow) 于 (Thu Apr 12 19:35:35 2012) 提到: c++ primer在类那一部分讲自增时说的是a++是先将a的值存在一个temp变量中,然后将a的值加1,赋值的话就是把temp的值赋给其他变量,所以第一题的思路就是把4赋给temp,然后a加1为5,再把temp的值赋给a,最终a为4 ☆─────────────────────────────────────☆ luoshengnan (Tracy) 于 (Thu Apr 12 19:38:14 2012) 提到: 应该不允许这样写程序的,++不适合放在不是完整表达式的地方。这样不知道哪个是先计算的。 ☆─────────────────────────────────────☆ Snake (Snake) 于 (Thu Apr 12 19:39:23 2012) 提到: 1 a=4 2 a=5 b=9 3 a=9 4 a= 10 5 a=10 我去验算下 vs2010答案为 1 a=5 2 a=5 b=9 3 a=9 4 a=13 5 a=11 我表示压力很大 ☆─────────────────────────────────────☆ Snake (Snake) 于 (Thu Apr 12 19:47:58 2012) 提到: 妈的,第一个题就坑爹 微软vs2010 编译出来的代码如下 int a=4; 009913CE mov dword ptr [a],4 a=a++; 009913D5 mov eax,dword ptr [a] 009913D8 mov dword ptr [a],eax 009913DB mov ecx,dword ptr [a] 009913DE add ecx,1 009913E1 mov dword ptr [a],ecx 它先执行了 = 号,再去执行++ , C++规范是这么写的么? 结果为5 ☆─────────────────────────────────────☆ Snake (Snake) 于 (Thu Apr 12 19:55:44 2012) 提到: int a=4; 00991437 mov dword ptr [a],4 a=a+(a++); 0099143E mov eax,dword ptr [a] 00991441 add eax,dword ptr [a] 00991444 mov dword ptr [a],eax 00991447 mov ecx,dword ptr [a] 0099144A add ecx,1 0099144D mov dword ptr [a],ecx printf("%d",a); 第三题 这里执行顺序因为()的缘故 ++在等号之前被执行 ☆─────────────────────────────────────☆ Snake (Snake) 于 (Thu Apr 12 20:11:43 2012) 提到: int a=4;int b=4;int c = 4; 012C146B mov dword ptr [a],4 012C1472 mov dword ptr [b],4 012C1479 mov dword ptr [c],4 ++a=++b+(c++); 012C1480 mov eax,dword ptr [a] 012C1483 add eax,1 012C1486 mov dword ptr [a],eax 012C1489 mov ecx,dword ptr [b] 012C148C add ecx,1 012C148F mov dword ptr [b],ecx 012C1492 mov edx,dword ptr [b] 012C1495 add edx,dword ptr [c] 012C1498 mov dword ptr [a],edx 012C149B mov eax,dword ptr [c] 012C149E add eax,1 012C14A1 mov dword ptr [c],eax 第四题 改了下 不然根本看不清楚那个++先执行 我算是看明白了 后++那是最后面才执行(等号之后), 前面第三题也是 ☆─────────────────────────────────────☆ longbaolian (Belinda) 于 (Thu Apr 12 21:30:33 2012) 提到: 我说一句大家别喷啊,考这个有什么意义呢?真正编程的时候谁会这么写呢?只要知道++a和a++的区别就好了吧 而且真正写程序的时候谁会这么写?
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。