问题描述:
main()
{int x=0,y=5,z=3;
while(z-->0&&++x<5)y=y-1;
printf("%d,%d,%d\n",x,y,z);
}
=====================================
main()
{int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7)if(p[i]%2)j+=p[i];
printf("%d\n",j);
}
以上2个问题,关于条件判断式的自加的顺序是什么?有人告诉我详细步骤吗?
我都晕了,到底是先取++前的值比较还是取整个表达式的值比较啊?为什么?
特此谢谢!
问题解答:
++在前,就是先自加后取值;++在后,就是先取值后自加。看下面问题更清楚。
问题1:
循环第1次:
判断条件z-->0,即先判断3>0,然后z-1变成2
判断条件++x<5,即先x+1变成1,然后判断1<5
条件成立,执行循环体后,x=1,y=4,z=2
循环第2次:
判断条件z-->0,即先判断2>0,然后z-1变成1
判断条件++x<5,即先x+1变成2,然后判断2<5
条件成立,执行循环体后,x=2,y=3,z=1
循环第3次:
判断条件z-->0,即先判断1>0,然后z-1变成0
判断条件++x<5,即先x+1变成3,然后判断3<5
条件成立,执行循环体后,x=3,y=2,z=0
循环第4次:
判断条件z-->0,即先判断0>0,然后z-1变成-1
条件不成立,循环结束
此时x=3,y=2,z=-1
问题2:
i从0开始,先判断是否<7,然后i再加1,第1次循环判断的是p[1]是否能整除2,也就是对奇数求和。
循环结束后i=8,j=45
这个问题与“短路求值”有关
请参见下面的网页:
http://baike.baidu.com/view/1083418.html
下面是个类似的问题(已解决):
http://zhidao.baidu.com/question/32186375.html?si=1
++/--在前就去他+1/-1后的值比较;
++/--在后就去他本身的值比较,但比较之后他+1/-1了;
一旦判断出真假性之后,系统并不执行后面的语句。
x=3;y=7;
if(x++<5||y++>10)..
之后x=4,y=7因为x++<5正确y++>10不执行。
你要把操作符看作是函数。
z++相当于 ++(z) 也可以看作 add(z),
而++在后面的返回值,也就是 ++(z)返回值 是 z本身
而 ++z 相当于另一个函数 ++(z) 返回值 是 z+1
就这么简单。以后自己重载操作符你就明白了,其实操作符就是一个特殊的函数
晕哦,楼主看书要仔细,这些都是基础知识
我也不多说,++在前先++,++在后,运算的值是++前的数
直接一点说 第一个z=1的时候是满足z-->0的,z=0就不行了
而x=3时可以x=4就不行了
第二个 x=6的时候可以,x=7不行
因为++x的时候是先把x+1再拿来比的