++a*++a
今天在群里看到一个问题,int a = 1,b;
b = ++a*++a;
printf("%d",b);
VC6.0输出9
其他编译器输出6.
有大佬解释一下嘛?{:1_918:}
这个不必纠结,不同编译器下,结果肯定有差异。 本帖最后由 苏紫方璇 于 2018-1-8 18:09 编辑
从反汇编里看就一目了然了
012317BCmov eax,dword ptr
012317BFadd eax,1
012317C2mov dword ptr ,eax
012317C5mov ecx,dword ptr
012317C8add ecx,1
012317CBmov dword ptr ,ecx
012317CEmov edx,dword ptr
012317D1imul edx,dword ptr
012317D5mov dword ptr ,edx 在线等~~~ 6可以理解,9我也不知道怎么来的。按理来说,++在前都是先自增的,第一个参与运费的是2,第二个参与运算的是3。至于9怎么来的。真不知道,你可以加断点进行调试 据说执行顺序不同,具体不清楚。见过类似的 正常人是不会写出这样的代码的,所以纠结这种问题,是浪费时间,之所以答案不同,自然是不同的编译器优化后的指令不同导致的 同意楼上,正常人是不会写出这种代码的。 ++a不是先自增加+后再运算嘛,第一个++a不是1+1=2,a的赋值等于2,第二个++a不是2+1=3,最终a赋值变成3,再相乘等于9 唉,不纠结了😂😂😂😂应该是编译标准不一样,谢谢各位。
页:
[1]