|
![]() | 作者: sniper167 [sniper167]
![]() |
登录 |
x=3 (x++)+(x++)+(++x)+(++x)=? turrboc里运行确实=20。 我是这样认为的: x=3 (x++)+(x++)+(++x)+(++x) 先计算括号里的,x++是先调用x,再加,++x是先加,再调用x。 1.第一个(x++)执行后等于3, 2.第二个(x++)同上, 经过两次自加后x=5了; 3.第三个(++x)执行相当于(++5),等于6,从此以后x=6了 4.第四个(++x)执行相当于(++6),等于7 合起来就是 3+3+7+7=20 可是在visual c++里确是=15。 我是这样想的: x=3 (x++)+(x++)+(++x)+(++x) 先计算括号里的,x++是先调用x,再加,++x是先加,再调用x。 1.第一个(x++)执行后等于3, 2.第二个(x++)同上, 3.第三个(++x)执行相当于(++3),等于4,从此以后x=4了 4.第四个(++x)执行相当于(++4),等于5 合起来就是 3+3+4+5=15 why?不知我的想法对不对,请指教 谁能讲一下? 谢谢 |
地主 发表时间: 04-01-08 15:43 |
![]() | 回复: 286 [unique] ![]() |
登录 |
如果不同编译器对同样语句生成不同结果是很正常的事,不要奇怪。比如TC的int是两个字节,而VC的int是四个字节。 不过,我劝你不要在这种让人费解的问题过多停留,而应把重点放在类、继承、消息机制、API的调用、控件的使用上。 |
B1层 发表时间: 04-01-08 17:22 |
![]() | 回复: yingzike [yingzike] ![]() |
登录 |
也在那个了吧,++A和A++不必要太深入的,知道有这么一回事就对 尽量关注其他方面比这些重要的多的东西 同意楼上的建议 ![]() ![]() |
B2层 发表时间: 04-01-08 17:51 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
那请问一下286在vc++中我的那种想法对不? |
B3层 发表时间: 04-01-08 18:09 |
![]() | 回复: yingzike [yingzike] ![]() |
登录 |
x=3 (x++)+(x++)+(++x)+(++x)=? TC2.0编译器对此的解释是对于等式是从右到左算的 那么按我的理解应当是: 第一步: 最右边 (++X) X=4 第二步: 最右边前一个(++X) X=5 第三步: 最右边前二个(X++) X=5 (X先等于5,等等式算完后再自加) 第四步: 最左边的(++X) X=6 了,(上面算完后,自加了) 不知道对不对,因为很久不玩这个了,加加自加的问题,所以错了,大家勿笑 ![]() ![]() ![]() |
B4层 发表时间: 04-01-08 18:17 |
![]() | 回复: sniper167 [sniper167] ![]() |
登录 |
不管对于不对 都感谢各位的回复 |
B5层 发表时间: 04-01-08 18:25 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号