鱼C论坛

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

新手求助,零基础入门c语言第二章3.16列题

[复制链接]
发表于 2014-11-18 21:48:48 | 显示全部楼层 |阅读模式

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

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

x
零基础入门c语言第二章3.16列题
  1. #include <stdio.h>

  2. void main()
  3. {
  4.         int i=5,j=5,p,q;
  5.         p=(i++)+(i++)+(i++);
  6.         q=(++j)+(++j)+(++j);
  7.         printf("%d,%d,%d,%d\n",p,q,i,j);
  8. }
复制代码
问题
”p“为什么等于15,在我看来,除去第一次先出来没有参加计算,每一次” i “都是加 1 的,出来计算的,应该是5+6+7=18
“q”为什么等于22,“j”每次都是加1出来计算的,应该是6+7+8=21
懂得亲解释一下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 22:07:51 | 显示全部楼层
我反汇编了下
  1. 5:            int i=5,j=5,p,q;
  2. 004109B8   mov         dword ptr [ebp-4],5                        // i = (ebp-4) = 5
  3. 004109BF   mov         dword ptr [ebp-8],5                        // j = (ebp-8) = 5
  4. 6:            p=(i++)+(i++)+(i++);
  5. 004109C6   mov         eax,dword ptr [ebp-4]                // eax = i = 5
  6. 004109C9   add         eax,dword ptr [ebp-4]                // eax = i + eax = 5+5=10
  7. 004109CC   add         eax,dword ptr [ebp-4]                // eax = i + eax = 10+5=15
  8. 004109CF   mov         dword ptr [ebp-0Ch],eax                // p = (ebp-0ch) = eax = 15
  9. 004109D2   mov         ecx,dword ptr [ebp-4]                // ecx = i = 5
  10. 004109D5   add         ecx,1                                                // ecx = ecx + 1 = 6
  11. 004109D8   mov         dword ptr [ebp-4],ecx                // i = ecx = 6
  12. 004109DB   mov         edx,dword ptr [ebp-4]                // edx = i = 6
  13. 004109DE   add         edx,1                                                // edx = edx + 1 = 7
  14. 004109E1   mov         dword ptr [ebp-4],edx                // i = edx = 7
  15. 004109E4   mov         eax,dword ptr [ebp-4]                // eax = i = 7
  16. 004109E7   add         eax,1                                                // eax = eax + 1 = 8
  17. 004109EA   mov         dword ptr [ebp-4],eax                // i = eax = 8
  18. 7:            q=(++j)+(++j)+(++j);
  19. 004109ED   mov         ecx,dword ptr [ebp-8]                // ecx = (ebp-8) = j = 5
  20. 004109F0   add         ecx,1                                                // ecx = ecx + 1 = 6
  21. 004109F3   mov         dword ptr [ebp-8],ecx                // j = ecx = 6
  22. 004109F6   mov         edx,dword ptr [ebp-8]                // edx = j = 6
  23. 004109F9   add         edx,1                                                // edx = edx + 1 = 7
  24. 004109FC   mov         dword ptr [ebp-8],edx                // j = edx = 7
  25. 004109FF   mov         eax,dword ptr [ebp-8]                // eax = j = 7
  26. 00410A02   add         eax,dword ptr [ebp-8]                // eax = eax + j = 14
  27. 00410A05   mov         ecx,dword ptr [ebp-8]                // ecx = j = 7
  28. 00410A08   add         ecx,1                                                // ecx = ecx + 1 = 8
  29. 00410A0B   mov         dword ptr [ebp-8],ecx                // j = ecx = 8
  30. 00410A0E   add         eax,dword ptr [ebp-8]                // eax = eax + j = 14 + 8 = 22
  31. 00410A11   mov         dword ptr [ebp-10h],eax                // q = eax = 22
复制代码


也就是说
p = (i++) + (i++) + (i++); 顺序为p = i+i+i = 15 ,然后 i = i + 1 + 1 + 1 = 8
q = (++j) + (++j) + (++j); 顺序为q = 7 + 7 + 8 = 22, 然后j = j + 1 + 1 + 1 = 8

这是编译器的问题,这种问题研究它没什么意义,不同的编译器可能有不同的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-22 22:46:16 | 显示全部楼层

谢谢了{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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