鱼C论坛

 找回密码
 立即注册
查看: 2894|回复: 2

关于自增与自减的困惑

[复制链接]
发表于 2013-10-17 08:17:38 | 显示全部楼层 |阅读模式
5鱼币

关于自增与自减的问题,请各位高手帮帮,才学c
  int i = 1;

printf (" %d\n ",(++i)+(++i));
printf (" %d\n ", --i);

结果怎么是6和2呢?应该是5和2啊?

  6
  2
Press any key to continue


int i = 1, j = 1, p, q, m, n;

p = ( i++ ) + ( i++ ) + ( i++ );
q =  j++  +  j++  +  j++ ;
m = ( ++i ) + ( ++i ) + ( ++i );
n =  ++j  +  ++j  +  ++j ;

printf (" p = %d\n q = %d\n m = %d\n n = %d\n", p, q, m, n);
return 0 ;

结果我想的是3和18,为什么是19呢?
p = 3
q = 3
m = 19
n = 19


最佳答案

查看完整内容

这种问题不用太纠结,一般都不会写这种代码的,由于编译器的不同,结果也不同。 经反汇编可以看出,第一题 i 先自增两次之后变成 3 ,然后 3 + 3 = 6第二题 p = 1 + 1 +1 =3 i =4 q = 1 + 1 + 1 =3 j = 4 开始 i = 4 然后 i自增一次为6 接着6+6=12 接着i自增一次为7 7+12=19 m = 6 + 6 + 7 = 19 开始j = 4 然后 j 自增一次为5 接着 j 自增一次为6 6+6=12 接着 j 自增一次为7 7 + 12 =19 n = 6 + 6 + 7 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-17 08:17:39 | 显示全部楼层
这种问题不用太纠结,一般都不会写这种代码的,由于编译器的不同,结果也不同。
经反汇编可以看出,第一题 i 先自增两次之后变成 3 ,然后 3 + 3 = 6
8:        printf (" %d\n ",(++i)+(++i));
0040102F   mov         eax,dword ptr [ebp-4]
00401032   add         eax,1
00401035   mov         dword ptr [ebp-4],eax
00401038   mov         ecx,dword ptr [ebp-4]
0040103B   add         ecx,1
0040103E   mov         dword ptr [ebp-4],ecx
00401041   mov         edx,dword ptr [ebp-4]
00401044   add         edx,dword ptr [ebp-4]
00401047   push        edx
00401048   push        offset string " %d\n " (0042201c)
0040104D   call        printf (004010a0)
00401052   add         esp,8
第二题
p = 1 + 1 +1 =3     i =4
q = 1 + 1 + 1 =3    j = 4
开始 i = 4   然后 i自增一次为6 接着6+6=12  接着i自增一次为7  7+12=19   m = 6 + 6 + 7 = 19
开始j = 4   然后 j 自增一次为5  接着 j 自增一次为6  6+6=12   接着 j 自增一次为7  7 + 12 =19
n = 6 + 6 + 7 =19
6:        int i = 1, j = 1, p, q, m, n;
0040D748   mov         dword ptr [ebp-4],1
0040D74F   mov         dword ptr [ebp-8],1
7:
8:        p = ( i++ ) + ( i++ ) + ( i++ );
0040D756   mov         eax,dword ptr [ebp-4]
0040D759   add         eax,dword ptr [ebp-4]
0040D75C   add         eax,dword ptr [ebp-4]
0040D75F   mov         dword ptr [ebp-0Ch],eax
0040D762   mov         ecx,dword ptr [ebp-4]
0040D765   add         ecx,1
0040D768   mov         dword ptr [ebp-4],ecx
0040D76B   mov         edx,dword ptr [ebp-4]
0040D76E   add         edx,1
0040D771   mov         dword ptr [ebp-4],edx
0040D774   mov         eax,dword ptr [ebp-4]
0040D777   add         eax,1
0040D77A   mov         dword ptr [ebp-4],eax
9:        q =  j++  +  j++  +  j++ ;
0040D77D   mov         ecx,dword ptr [ebp-8]
0040D780   add         ecx,dword ptr [ebp-8]
0040D783   add         ecx,dword ptr [ebp-8]
0040D786   mov         dword ptr [ebp-10h],ecx
0040D789   mov         edx,dword ptr [ebp-8]
0040D78C   add         edx,1
0040D78F   mov         dword ptr [ebp-8],edx
0040D792   mov         eax,dword ptr [ebp-8]
0040D795   add         eax,1
0040D798   mov         dword ptr [ebp-8],eax
0040D79B   mov         ecx,dword ptr [ebp-8]
0040D79E   add         ecx,1
0040D7A1   mov         dword ptr [ebp-8],ecx
10:       m = ( ++i ) + ( ++i ) + ( ++i );
0040D7A4   mov         edx,dword ptr [ebp-4]
0040D7A7   add         edx,1
0040D7AA   mov         dword ptr [ebp-4],edx
0040D7AD   mov         eax,dword ptr [ebp-4]
0040D7B0   add         eax,1
0040D7B3   mov         dword ptr [ebp-4],eax
0040D7B6   mov         ecx,dword ptr [ebp-4]
0040D7B9   add         ecx,dword ptr [ebp-4]
0040D7BC   mov         edx,dword ptr [ebp-4]
0040D7BF   add         edx,1
0040D7C2   mov         dword ptr [ebp-4],edx
0040D7C5   add         ecx,dword ptr [ebp-4]
0040D7C8   mov         dword ptr [ebp-14h],ecx
11:       n =  ++j  +  ++j  +  ++j ;
0040D7CB   mov         eax,dword ptr [ebp-8]
0040D7CE   add         eax,1
0040D7D1   mov         dword ptr [ebp-8],eax
0040D7D4   mov         ecx,dword ptr [ebp-8]
0040D7D7   add         ecx,1
0040D7DA   mov         dword ptr [ebp-8],ecx
0040D7DD   mov         edx,dword ptr [ebp-8]
0040D7E0   add         edx,dword ptr [ebp-8]
0040D7E3   mov         eax,dword ptr [ebp-8]
0040D7E6   add         eax,1
0040D7E9   mov         dword ptr [ebp-8],eax
0040D7EC   add         edx,dword ptr [ebp-8]
0040D7EF   mov         dword ptr [ebp-18h],edx
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-17 11:41:07 | 显示全部楼层
不用过分的纠结这个吧,在实际中没有实用价值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 03:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表