鱼C论坛

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

求这道题的算法

[复制链接]
发表于 2012-3-19 23:02:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 阳光。零落 于 2012-3-19 23:29 编辑

void main()
{
     int i=5,j=5,p,q;
     p=(i++)+(i++)+(i++);
     q=(++j)+(++j)+(++j);
     printf("%d,%d,%d,%d",p,q,i,j);
}

这道例题我刚刚用编译器运算得出P=15 q=22 i=8 j=8    不知道q=22是怎么算的 望高手解答....本人新手 请解答详细点.......
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-19 23:24:50 | 显示全部楼层
本帖最后由 wAterLoo 于 2012-3-19 23:30 编辑

这个东西‘答案说不准,看你的编译器了
VS 2010 的结果是 p=15 q=24 i =8 j =8
VC ++ 的结果是  p=15 q=22 i =8 j =8
i ++ 与 ++ i 的区别就是
如果只是单独的一句 i ++ 和 ++i 可以不做区别
但是如果像这样 p = (i++); p=(++i);的需要 i++ 和 ++i 的计算结果再进行赋值的时候
p = (i++) 等价于 p= i; i++ 这2个语句的组合
p = (++i)等价于 i = i + 1;  p = i;
q=(++j)+(++j)+(++j); 但是这个语句比较特别,我反汇编分析了下
在VC++编译器里面,它是这样子的
j=j+1; j = j +1; j = j + j + j; j = j + 1 所以结果是22
但是在VS2010里面
j=j+1; j = j +1;  j = j + 1;j = j + j + j 因此结果是24

p=(i++)+(i++)+(i++); 在2个编译器倒没有区别
不过这种代码当作深入的学习即可,楼主应该避免使用于这种 难遇理解的代码

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-3-19 23:29:37 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-12 04:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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