返回信息流☆─────────────────────────────────────☆
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++的区别就好了吧
而且真正写程序的时候谁会这么写?
这是一条镜像帖。来源:北邮人论坛 / cpp / #61508同步于 2012/4/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[合集] 腾讯笔试题 自增运算a=a++;
shenlei
2012/4/13镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。