鱼C论坛

 找回密码
 立即注册
查看: 1881|回复: 3

c语言例题

[复制链接]
发表于 2015-9-5 21:04:19 | 显示全部楼层 |阅读模式

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

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

x
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
我用程序走了一遍,结果p=15,q=22,为什么出现这种结果求高手指点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-5 22:29:20 | 显示全部楼层
这种代码用不同的C语言编译器编译出来的程序,执行结果本来就不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-5 22:31:52 | 显示全部楼层
i++:这个是一般用在循环上吧,i++是执行完后面的语句才加1;

而++j就先做j+1才执行后面的语句。(++j)+(++j)+(++j) 这种表达式本身就不符合C语言对代码的要求是毫无意义的这是没有意义的[/color]毫无意义 ≠ 错

下面是vc6的计算 别的编译器不一样,
1 6:    q =(++j)+(++j)+(++j);
2 00401036   mov         eax,dword ptr [ebp-8]           移动J=5到寄存器eax内
3 00401039   add         eax,1                                       在寄存器eax值上加1,eax=6
4 0040103C   mov         dword ptr [ebp-8],eax          把寄存器的值移动到变量j上去,j= 6
5 0040103F   mov         ecx,dword ptr [ebp-8]           移动J=6到寄存器ecx
6 00401042   add         ecx,1                                       在寄存器上ecx+1,j=6
7 00401045   mov         dword ptr [ebp-8],ecx          把寄存器ecx上的值移到J上去,J=7
8 00401048   mov         edx,dword ptr [ebp-8]         把J=7移动到寄存器edx=7
9 0040104B   add         edx,dword ptr [ebp-8]          edx值+j  此时j=7,edx=7+7
10 0040104E   mov         eax,dword ptr [ebp-8]          把j=7Move给 第一个寄存器eax
11 00401051   add         eax,1                                       eax再加1,此时寄存器eax=8
12 00401054   mov         dword ptr [ebp-8],eax          把此时的eax的值move给 j=8
13 00401057   add         edx,dword ptr [ebp-8]           edx值= edx+j = 14+8
14 0040105A   mov         dword ptr [ebp-0Ch],edx      edx值 move给 j = 22
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-6 08:13:09 | 显示全部楼层
快乐呵呵 发表于 2015-9-5 22:31
i++:这个是一般用在循环上吧,i++是执行完后面的语句才加1;

而++j就先做j+1才执行后面的语句。(++j)+( ...

看这样好像是先计算前两个括号里的++运算再执行第一个加法运算,然后执行最后一个++运算再加上去是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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