鱼C论坛

 找回密码
 立即注册
查看: 2458|回复: 11

求助自加题目

[复制链接]
发表于 2012-2-4 14:26:09 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 猪八哥 于 2012-2-7 19:54 编辑

#include<stdio.h>
int main()
{
        int a=5,b=5,c,d;
        c=(a++)+(a++)+(a++);
    d=(++b)+(++b)+(++b);

        printf("c=%d,b=%d,%d,%d\n",c,d,a,b);
        return 0;
}
编译后算出来C=15 D=22  A B=8
但是 我自己算 怎么是c=5+6+7=18  d=6+7+8=21  a=8  b=8
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-4 14:27:44 | 显示全部楼层
我用的是vc6.0
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-4 16:10:36 | 显示全部楼层
13:               int a=5,b=5,c,d;
00401028   mov         dword ptr [ebp-4],5
0040102F   mov         dword ptr [ebp-8],5
14:               c=(a++)+(a++)+(a++);
00401036   mov         eax,dword ptr [ebp-4]
00401039   add         eax,dword ptr [ebp-4]
0040103C   add         eax,dword ptr [ebp-4]
0040103F   mov         dword ptr [ebp-0Ch],eax
00401042   mov         ecx,dword ptr [ebp-4]
00401045   add         ecx,1
00401048   mov         dword ptr [ebp-4],ecx
0040104B   mov         edx,dword ptr [ebp-4]
0040104E   add         edx,1
00401051   mov         dword ptr [ebp-4],edx
00401054   mov         eax,dword ptr [ebp-4]
00401057   add         eax,1
0040105A   mov         dword ptr [ebp-4],eax
反编译下,看到是00401028   mov         dword ptr [ebp-4],5
把5赋值给  dword ptr [ebp-4],
执行:               c=(a++)+(a++)+(a++);时,可以看到
00401036   mov         eax,dword ptr [ebp-4]
00401039   add         eax,dword ptr [ebp-4]
0040103C   add         eax,dword ptr [ebp-4]
0040103F   mov         dword ptr [ebp-0Ch],eax
将5加3次赋值给c了,所以c是15.然后才将a的值加1加3次,a为8
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-4 21:20:01 | 显示全部楼层
这个问题很纠结,或者换一个编译系统会不同的,不知谁对谁错.
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-4 21:32:49 | 显示全部楼层
原来我为这个问题研究到半夜亮点 依然云里雾里  
那时候没有学会单步,现在会单步了 呵呵事情简单多了 建议单步
我怕误导你
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-5 00:34:22 | 显示全部楼层
未定义行为
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-5 22:24:15 | 显示全部楼层

我新手一个,单步都不知道是啥,哈哈
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-5 22:24:33 | 显示全部楼层

。。。不明白??什么叫未定义行为
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-5 22:24:56 | 显示全部楼层
猪好大 发表于 2012-2-4 21:20
这个问题很纠结,或者换一个编译系统会不同的,不知谁对谁错.

你说的对,我换了 VS2008  结果又是不一样,
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-5 22:26:11 | 显示全部楼层
小片片 发表于 2012-2-4 16:10
13:               int a=5,b=5,c,d;
00401028   mov         dword ptr [ebp-4],5
0040102F   mov       ...

那啥,我学C语言。。3个月不到。。。你说的真高深啊,哈哈,但是 我换了VS2008,结果又不一样,我估计是 编译系统的问题,,计算不一样。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-6 11:17:19 | 显示全部楼层
猪八哥 发表于 2012-2-5 22:26
那啥,我学C语言。。3个月不到。。。你说的真高深啊,哈哈,但是 我换了VS2008,结果又不一样,我估计是  ...

我也刚学两月不到,主要我先学的小甲鱼老师的零基础入门汇编语言,然后才学C。个人感觉还是先学下汇编。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-6 11:26:39 | 显示全部楼层
小片片 发表于 2012-2-6 11:17
我也刚学两月不到,主要我先学的小甲鱼老师的零基础入门汇编语言,然后才学C。个人感觉还是先学下汇编。。 ...

嗯嗯,我也准备C 和汇编一起学了
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-11 02:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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