鱼C论坛

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

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

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

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

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

x
零基础入门c语言第二章3.16列题
#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);
}
问题
”p“为什么等于15,在我看来,除去第一次先出来没有参加计算,每一次” i “都是加 1 的,出来计算的,应该是5+6+7=18
“q”为什么等于22,“j”每次都是加1出来计算的,应该是6+7+8=21
懂得亲解释一下,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-19 22:07:51 | 显示全部楼层
我反汇编了下
5:            int i=5,j=5,p,q;
004109B8   mov         dword ptr [ebp-4],5                        // i = (ebp-4) = 5
004109BF   mov         dword ptr [ebp-8],5                        // j = (ebp-8) = 5
6:            p=(i++)+(i++)+(i++);
004109C6   mov         eax,dword ptr [ebp-4]                // eax = i = 5
004109C9   add         eax,dword ptr [ebp-4]                // eax = i + eax = 5+5=10
004109CC   add         eax,dword ptr [ebp-4]                // eax = i + eax = 10+5=15
004109CF   mov         dword ptr [ebp-0Ch],eax                // p = (ebp-0ch) = eax = 15
004109D2   mov         ecx,dword ptr [ebp-4]                // ecx = i = 5
004109D5   add         ecx,1                                                // ecx = ecx + 1 = 6
004109D8   mov         dword ptr [ebp-4],ecx                // i = ecx = 6
004109DB   mov         edx,dword ptr [ebp-4]                // edx = i = 6
004109DE   add         edx,1                                                // edx = edx + 1 = 7
004109E1   mov         dword ptr [ebp-4],edx                // i = edx = 7
004109E4   mov         eax,dword ptr [ebp-4]                // eax = i = 7
004109E7   add         eax,1                                                // eax = eax + 1 = 8
004109EA   mov         dword ptr [ebp-4],eax                // i = eax = 8
7:            q=(++j)+(++j)+(++j);
004109ED   mov         ecx,dword ptr [ebp-8]                // ecx = (ebp-8) = j = 5
004109F0   add         ecx,1                                                // ecx = ecx + 1 = 6
004109F3   mov         dword ptr [ebp-8],ecx                // j = ecx = 6
004109F6   mov         edx,dword ptr [ebp-8]                // edx = j = 6
004109F9   add         edx,1                                                // edx = edx + 1 = 7
004109FC   mov         dword ptr [ebp-8],edx                // j = edx = 7
004109FF   mov         eax,dword ptr [ebp-8]                // eax = j = 7
00410A02   add         eax,dword ptr [ebp-8]                // eax = eax + j = 14
00410A05   mov         ecx,dword ptr [ebp-8]                // ecx = j = 7
00410A08   add         ecx,1                                                // ecx = ecx + 1 = 8
00410A0B   mov         dword ptr [ebp-8],ecx                // j = ecx = 8
00410A0E   add         eax,dword ptr [ebp-8]                // eax = eax + j = 14 + 8 = 22
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-11-25 11:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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