注册 登录
编程论坛 C++教室

小菜鸟,零基础,问大家一个很简单的问题

心海天蓝 发布于 2013-03-25 08:53, 681 次点击
我做了一道单选题,是这样的x的初始值是2, x++,2*x.  我认为x的值是4,可是答案是6,求解求解!!各位大神求解啊

[ 本帖最后由 心海天蓝 于 2013-3-25 08:55 编辑 ]
6 回复
#2
wp2319572013-03-25 08:55
x的基值是多少呢
#3
Pirelo2013-03-25 10:21
按照你的描述,我觉得2*x的值才是6
#4
qunxingw2013-03-25 10:33
学会调试,
#5
ap08053192013-03-25 10:51
x++之后x的值:x=3;
2*x之后x的值:x=3;
2*x的积:2*3=6;
#6
azzbcc2013-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
rjsp2013-03-25 12:49
序列点是一个时间点(在整个表达式全部计算完毕之后或在 ||、 &&、 ? : 或逗号 运算符处, 或在函数调用之前)

也就是说,对于 x++,2*x,在进行2*x之前,++的副作用必须已经完成。
1