编程论坛
注册
登录
编程论坛
→
C++教室
小菜鸟,零基础,问大家一个很简单的问题
心海天蓝
发布于 2013-03-25 08:53, 681 次点击
我做了一道单选题,是这样的x的初始值是2, x++,2*x. 我认为x的值是4,可是答案是6,求解求解!!各位大神求解啊
[
本帖最后由 心海天蓝 于 2013-3-25 08:55 编辑
]
6 回复
#2
wp231957
2013-03-25 08:55
x的基值是多少呢
#3
Pirelo
2013-03-25 10:21
按照你的描述,我觉得2*x的值才是6
#4
qunxingw
2013-03-25 10:33
学会调试,
#5
ap0805319
2013-03-25 10:51
x++之后x的值:x=3;
2*x之后x的值:x=3;
2*x的积:2*3=6;
#6
azzbcc
2013-03-25 11:00
程序代码:
#include
<stdio.h>
int
main()
{
int
x =
2
;
int
b = (x++,
2
* x);
return
0
;
}
这是VC对int b = (x++, 2 * x)的反汇编代码
程序代码:
6
:
int
b = (x++,
2
* x);
0040102F mov eax,dword ptr [ebp-
4
]
//
取数据 2 ,存入 eax
00401032
add eax,
1
//
eax 中的数 即 x加 1,eax值变为 3
00401035
mov dword ptr [ebp-
4
],eax
//
放回。此时 x值已经变成 3了
00401038
mov ecx,dword ptr [ebp-
4
]
//
再取数据 3,
0040103B shl ecx,
1
//
左移 1位,就是乘以 2的意思,结果为 6
0040103D mov dword ptr [ebp-
8
],ecx
//
把 6存入 b对应的地址
#7
rjsp
2013-03-25 12:49
序列点是一个时间点(在整个表达式全部计算完毕之后或在 ||、 &&、 ? : 或
逗号
运算符处, 或在函数调用之前)
也就是说,对于 x++,2*x,在进行2*x之前,++的副作用必须已经完成。
1