鱼C论坛

 找回密码
 立即注册
查看: 2817|回复: 10

有一个问题,求解答

 关闭 [复制链接]
发表于 2011-7-30 12:39:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼哥课上有一个题目
#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\n",p,q,i,j);
}

的输出结果为什么是15,22,8,8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-30 13:26:25 | 显示全部楼层
难道论坛就没人了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-30 14:52:11 | 显示全部楼层
我总觉得这个表达式很有歧义!
因为不同的编译器可能会有不同的结果!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-30 15:25:25 | 显示全部楼层
这个问题很早就有人说过,好像都过几个月了。关于这种++,--运算的问题,楼主不必在纠结下去了,一般用的时候不会写这么复杂的++,--运算的,也最好不要这样写。不同的编译器的处理方式不同,结果也不同,这样写也没什么意义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-30 17:10:37 | 显示全部楼层
不同的编译器会有不同的结果的,所以没人会纠结这种问题~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-31 18:25:20 | 显示全部楼层
谢谢各位!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-31 18:26:00 | 显示全部楼层
谢谢各位!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-31 23:24:30 | 显示全部楼层
5:             p=(i++)+(i++)+(i++);
00401036 8B 45 FC             mov         eax,dword ptr [ebp-4]  ;ebp - 4是 i | ebp - 8 是 j| ebp - 0C 是p | ebp - 10 是 q
00401039 03 45 FC             add         eax,dword ptr [ebp-4]
0040103C 03 45 FC             add         eax,dword ptr [ebp-4]
0040103F 89 45 F4             mov         dword ptr [ebp-0Ch],eax  ; 直接加好后结果放入 p
00401042 8B 4D FC             mov         ecx,dword ptr [ebp-4]
00401045 83 C1 01             add         ecx,1
00401048 89 4D FC             mov         dword ptr [ebp-4],ecx
0040104B 8B 55 FC             mov         edx,dword ptr [ebp-4]
0040104E 83 C2 01             add         edx,1
00401051 89 55 FC             mov         dword ptr [ebp-4],edx
00401054 8B 45 FC             mov         eax,dword ptr [ebp-4]
00401057 83 C0 01             add         eax,1
0040105A 89 45 FC             mov         dword ptr [ebp-4],eax   ;加3次结果放入 i
6:             q=(++j)+(++j)+(++j);
0040105D 8B 4D F8             mov         ecx,dword ptr [ebp-8]
00401060 83 C1 01             add         ecx,1
00401063 89 4D F8             mov         dword ptr [ebp-8],ecx
00401066 8B 55 F8             mov         edx,dword ptr [ebp-8]
00401069 83 C2 01             add         edx,1
0040106C 89 55 F8             mov         dword ptr [ebp-8],edx   
0040106F 8B 45 F8             mov         eax,dword ptr [ebp-8]
00401072 03 45 F8             add         eax,dword ptr [ebp-8] ; 7 + 7 = 14
00401075 8B 4D F8             mov         ecx,dword ptr [ebp-8]
00401078 83 C1 01             add         ecx,1
0040107B 89 4D F8             mov         dword ptr [ebp-8],ecx
0040107E 03 45 F8             add         eax,dword ptr [ebp-8] ; 14 + 8 = 22;
00401081 89 45 F0             mov         dword ptr [ebp-10h],eax ;22放入q


-------------------------------------------------------------------------------

vc里就是这么说的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 15:24:51 | 显示全部楼层
在VC的编译或者GCC变异的效果可能不同,不同的操作系统变异的效果也可能不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 19:55:08 | 显示全部楼层
确实 关于第二个蛋疼的结果22 我也很诧异。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 11:04:25 | 显示全部楼层
这种连续的++,--确实伤的不是电脑,伤的是人脑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-8 12:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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