鱼C论坛

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

大家给我看一下这个程序第一个答案等于22第二15第三8第四8第二不用说了剩下的给个解释

[复制链接]
发表于 2012-2-24 13:13:28 | 显示全部楼层 |阅读模式
5鱼币
#include<stdio.h>
void main()
{
int i=5,j=5,q,p;
p=(++j)+(++j)+(++j);为什么等于22啊p和q为什么等于8{:2_38:}
q=(i++)+(i++)+(i++);

printf("%d,%d,%d,%d\n",p,q,i,j);
}

最佳答案

查看完整内容

p=(++j)+(++j)+(++j);等于22是正确的,有的等于24,这和编译器有关,等于哪个都对,我给你说下为什么会等于22,从第一个++j开始,应为j的初值为5在第一个++j后就等于6了,然后到第二个++j就等于7,到这里编译器不会去计算第三个++j,这时编译器会把前两个++j的和算出来,由于到第二个时j=7,所以编译器会把第一个++j也认为是7所以前两个加在一起就是7+7=14,然后再加上第三个++j是8,那结果就是7+7+8=22. 还有一种结果是24,我这 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-2-24 13:13:29 | 显示全部楼层
p=(++j)+(++j)+(++j);等于22是正确的,有的等于24,这和编译器有关,等于哪个都对,我给你说下为什么会等于22,从第一个++j开始,应为j的初值为5在第一个++j后就等于6了,然后到第二个++j就等于7,到这里编译器不会去计算第三个++j,这时编译器会把前两个++j的和算出来,由于到第二个时j=7,所以编译器会把第一个++j也认为是7所以前两个加在一起就是7+7=14,然后再加上第三个++j是8,那结果就是7+7+8=22.
还有一种结果是24,我这里算出来就是24我用的是VS2010,得出24的结果是因为,编译器把三个++j的值全算完,然后取最后一个++j的值再相加就是8+8+8=24
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-24 15:33:33 | 显示全部楼层
与编译器有关。。
这个问题不用深究了。以后碰到这种代码。直接过掉。。
如果想弄明白怎么回事,可以学习汇编的知识查看反汇编代码。看编译器到底是怎么翻译这些C语言语句的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-2-25 14:48:26 | 显示全部楼层
//不同编译器结果不一样。这里是VC6的。不用太介意,这问题主要看调试。
#include<stdio.h>

int main()
{
        int i=5,j=5,p,q;
        p=(++j)+(++j)+(++j);        //先算(++j)+(++j),7+7=14,j再自增1,再算14+8=22
        q=(i++)+(i++)+(i++);        //先3个i相加q=15,再自增三次i=8。
       
        printf("%d,%d,%d,%d\n",p,q,i,j);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 19:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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