首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于i++,++i的两道题解决方法

2012-02-06 
关于i++,++i的两道题inti1intjj(++i)+(++i)+(++i)+(++i)//j15inti1intjj(++i)+(++i)+(i++)+(i++

关于i++,++i的两道题
int   i=1;
    int   j;
    j=(++i)+(++i)+(++i)+(++i);//j=15

    int   i=1;
    int   j;
    j=(++i)+(++i)+(i++)+(i++)+(++i);//j=16

这两个为什么第一个是   15,不是应该   j=2+3+4+5=14   马
第二个   是16       不是应该     j=2+3+3+3+4=15   马



[解决办法]
第一个是2+3+4+5=14
第二个是2+3+3+4+6=18
[解决办法]
第一个是2+3+4+5=14
第二个是2+3+3+4+6=18
[解决办法]
这是和语言中多元运算的求值顺序相关的.
在C++中,好像只有几种多元运算规定了求值顺序.比如?:运算,标准中明确说了它是求条件的值,再求相应结果的值的.
而像+,-,*,/这类的运算,标准中没有规定先求前面的值还是后面的值.所以这种复合表达式的值是未定义的.
还有像函数参数的求值顺序,更容易让人迷惑,其实它也是未定义的,虽然多数编译器都是按入栈的顺序.
[解决办法]
int i=1;
int j;
j=(++i)+(++i)+(++i)+(++i);//j=15
> > BCB6 j=20
int i=1;
int j;
j=(++i)+(++i)+(i++)+(i++)+(++i);//j=16
> > BCB6 j=20
[解决办法]
3+3+4+5=15
3+3+3+3+4
这个对写程序来说没什么意义,没有谁会这么用
[解决办法]
有括号,应该是
2+3+4+5=14
2+3+4+5+6=20
[解决办法]
5+5+5+5=20
((4+4+3+3+4)++)++ = 20
[解决办法]
int i=1; int j;
j=(++i)+(++i)+(++i)+(++i);//j=15
int i=1; int j;
j=(++i)+(++i)+(i++)+(i++)+(++i);//j=16
这两个为什么第一个是 15,不是应该 j=2+3+4+5=14 马
第二个 是16 不是应该 j=2+3+3+3+4=15 马
//系统不同有不同的结果:组合很多
第一句
2+3+4+5=14
5+5+5+5=20
第二句
2+3+3+3+4=15
2+3+3+3+5=16
2+3+3+4+5=17
4+4+4+4+4=20


[解决办法]
不同的编译器对于前置加和后置加可能有不同的执行结果 ,和结合顺序有关,VC6.0采用的左结合优先的顺序。另外,前置加和后置加只有在和赋值语句连用的时候才有区别。单独使用时效果一样。
[解决办法]
第二个应该是2+3+3+4+5=16.

j=(++i)+(++i)+(i++)+(i++)+(++i);

第一,二个I先自增再参与运算,第三个I先参加运算再自增,此时I为4,到第四个I时也是先运算再

自增,下面就不用再说了,最后就得到结果16.

热点排行