C语言中关于自加自减的问题

发布时间:2024-05-13 01:38 发布:上海旅游网

问题描述:

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再拿来比的

热点新闻