#include"stdio.h"
int main()
{
int a=3,b=5,c=8;
if(a++<3&&c--!=0) b=b+1;
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
不管是a是3还是4,但是永远不会比3小,所以不会执行,b+1,a++变成了4,其他原样输出。
这里我就不是很清楚了,是a先取值去跟3比较,还是++完去跟3比较,这里你可以尝试下,再告诉我,嘻嘻,不过肯定不会比3小,所以if不会执行正确
如果有帮助,请采纳一下!
a++ 加1,所以a=4
if(a++<3&&c--!=0) 表达式内结果是假,所以不执行b=b+1;,b=5。补充一下,如果是++a,++a就大于3了
c没有任何赋值,所以c=8;
if(a++<3&&c--!=0) b=b+1;
关键在于&&,如果&&左边的表达式为假,那么右边的表达式不会执行,知道了这一点再来看
a++<3, a为4,小于3不成立,为假,a再自加,右边的c--!=0 不执行
所以b=b+1也没有执行
结果就是a=4,b=5,c=8
望采纳~
a++<3为假,故a++<3&&c--!=0为假,不执行c--!=0和b=b+1;
a++<3运行后,a=4
&&运算符有假后面的不进行判断
1 短路与运算符用法,&&左边为假,则不会在判断右边(短路),左边为真继续判断右边内容
2 后置++运算符,已经改变了a的值,但返回的不是改变后的值,是原始值,实际上a值已经改变了,这块是a++与3比较,注意不是a,所以用的是a++的值,返回的是原来a的值
3 由于短路与规则,左侧为假,不会执行右侧判断、if条件为假,不进入if语句块,直接打印
4 打印的是a,在之前已经改变了,所以a值改变了,b和c语句没执行到,不改变其变量值
逻辑短路,&&当前半部分已经判断为假,后面半部分的判断就不会执行,c--不会执行。由于判断为假,b=b+1也不执行。
C/C++博主求关注,有问题可以私聊一起探讨