#include<stdio.h>
int main(){
int a=0,b=3,c=2;
if(a++&&b++){
c--;
}else if(a+1==6||b--){
c++;
}
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
先执行&&
a++ && b++其中都是X++形式,所以是先取值再自加故&&运算时取得值a=0因为a=0
所以这个表达式就是0&&后面的b++b不需要计算,程序不执行故b的值不变
执行else语句
a+1==6不成立 判断b-- b=2 不为0所以执行else内部 c++ c=3
你用调试器单步执行就明白程序怎么运行的。
第一个IF:a++假。
a1,b3,c2。
第二个IF,a+1==6假,b--真。
a1,b2,c3。
最后:123
#include<stdio.h>
int main() {
int a = 0, b = 3, c = 2;
if (a++ && b++) //如果a和b都不为0,则c=c-1;然后a=a+1.b=b+1。
{
c--;
}
else if (a + 1 == 6 || b--) //如果a+1等于6或者b不等于0;则c=c+1;然后b=b-1。
{
c++;
}
printf("a=%d,b=%d,c=%d\n", a, b, c);
}
/*起始:a = 0, b = 3,先执行if(a++&&b++),因为a=0,由于&&的特殊性质:两个数进行&&操作,只要有一个为0,则结果为0。
所以不用对&&后的b++运算。因此a=a+1=1。但是判断时if条件为0,不执行;而是执行else if中的语句,
c = c + 1 = 2 + 1 = 3。b=b-1=3-1=2。此时a=1,b=2,c=3.
*/
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!