鱼C论坛

 找回密码
 立即注册
查看: 2689|回复: 5

搞不懂的++i和--i,老贴不能解惑

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

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

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

x
main()
{int i,j,k,l,m;

i=6;
j=(++i)+(++i);
printf("j=%d\n",j);
printf("i=%d\n",i);

i=6;
k=(--i)+(--i);
printf("k=%d\n",k);
printf("i=%d\n",i);

i=6;
l=(++i)+(++i)+(++i);
printf("l=%d\n",l);
printf("i=%d\n",i);

i=6;
m=(--i)+(--i)+(--i);
printf("m=%d\n",m);
printf("i=%d\n",i);
}
运行结果为j=16,k=8,l=25,m=11
如果按谭浩强书上所说应为j=16,k=8,l=27,m=9,不知道为什么会是这种结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-14 14:16:19 | 显示全部楼层
这个 有关 i++  和 ++i 表达式 的结果问题、是受限于编译器的、编译器不同、结果就会不同。具体原理,你可以听听有关汇编的教程、、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-14 21:57:05 | 显示全部楼层
楼上正解! ++i 和 i++ 的区别在于,++在前面就就先加值再运行,而++在后面就先运行再加值,但因机器或者编译器不同,执行的结果也会有所不同,所以建议无论是 ++i 还是 i++ ,尽量单独作为一个语句使用,不要作为组合语句的一部分,因为作用域不同,我们无法确定我们的机器或者所使用的编译器执行 ++i 和 i++ 时的是即时生效还是执行完组合语句才生效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-15 00:19:01 | 显示全部楼层
这个问题很深奥啊,有大虾给讲解哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-15 08:43:27 | 显示全部楼层
感谢上面几位的回答,但是我觉得不是太满意,虽然无法确定我们的机器或者所使用的编译器执行 ++i 和 i++ 时的是即时生效还是执行完组合语句才生效。 但是从上面的结果来看,j=16,k=8是按执行完组合语句生效的,而l=25,m=11则按什么都 说不通,如是按执行完组合语句生效应该是l=27,m=9,如是即时生效,l=7+8+9=24,m=5+4+3=12,总不可能编译器执行时不按同一法则来吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-2-15 10:34:57 | 显示全部楼层
还是没有好好挖老贴啊,http://bbs.fishc.com/forum.php?m ... %3D12%26typeid%3D12,看了这以后才知道为什么会l=25,m=11,不再纠结这个没用的东西了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-17 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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