℡.xiao敏 发表于 2012-3-20 21:20:28

q=(++j)+(++j)+(++j);问题

本帖最后由 ℡.xiao敏 于 2012-3-20 21:41 编辑

#include <stdio.h>

void main()
{
    int i=5,j=5,p,q;
      p=(i++)+(i++)+(i++);
      q=(++j)+(++j)+(++j);
      printf("%d,%d,%d,%d",p,q,i,j);
}

编译出来的结果j=8 怎么q=22啊?实在想不明白,后来我直接用q=(++j)+(++j)来测试,结果是q=14,j=7这好像才符合逻辑啊、

℡.xiao敏 发表于 2012-3-20 21:23:01

q不是应该等于24吗

℡.xiao敏 发表于 2012-3-20 21:41:12

自己用反汇编看了下代码……

7:      q=(++j)+(++j)+(++j);
0040D73D   mov         ecx,dword ptr
0040D740   add         ecx,1
0040D743   mov         dword ptr ,ecx
0040D746   mov         edx,dword ptr
0040D749   add         edx,1
0040D74C   mov         dword ptr ,edx
0040D74F   mov         eax,dword ptr
0040D752   add         eax,dword ptr
0040D755   mov         ecx,dword ptr
0040D758   add         ecx,1
0040D75B   mov         dword ptr ,ecx
0040D75E   add         eax,dword ptr
0040D761   mov         dword ptr ,eax

原来是第一个j和第二个j先自增1 2次之后相加了,再第三次自增1。。。这是vc的问题啊

marlon 发表于 2012-7-7 00:00:59

我试过了,在visual studio 2010中运行是24.看了楼主的解释,豁然开朗啊。

1144290241 发表于 2012-7-7 21:56:46

说实话,纠结这些东西都是没有意义的,这些都不是规范的书写方法,除非你的目的就是写别人看不懂的程序。否则,千万不要写这种语句,最好的方法是吧    ++语句 与 赋值语句 分开来写
++j;
q=j;

Mr涛声依旧NOo1 发表于 2012-7-15 11:37:22

我也是纠结这个问题....想不通...:Q

我是师兄 发表于 2012-7-15 21:23:00

换个编译器 也许就能看到你想看到的24了

枫叶独落 发表于 2012-7-16 16:48:09

这个问题我也纠结着呢:Q

侬本多情 发表于 2012-7-17 16:52:26

我感觉(++i )+( ++i )+ (++i)相当于
((++i)+(++i))+(++i)

又迷路了 发表于 2021-3-19 23:59:34

℡.xiao敏 发表于 2012-3-20 21:23
q不是应该等于24吗

我为什么算的是21呢,大佬能说说吗?我想的是q=6+7+8=21,哈哈

庸人误我 发表于 2021-3-20 11:37:11

这个问题是因为部分编译器的内部的表达式是使用的前缀式计算,会将((++j)+(++j))先计算了,然后在计算+ (++j)
页: [1]
查看完整版本: q=(++j)+(++j)+(++j);问题