c语言问题想不通,望指点?

来源:百度知道 编辑:UC知道 时间:2024/05/25 08:20:34
main()
{
int a=-1,b=4,k;
k=(++a<0)&&!(b<=0);
printf("%d,%d,%d\n",k,a,b);
}
输出的结果是0,0,4为什么不是0,0,3呢?
对不起我写错了!k=(++a<0)&&!(b<=0); 应该是k=(++a<0)&&!(b--<=0);

其实b不会被访问
执行k=(++a<0)&&!(b<=0); 语句时,先判断++a<0 不成立,即知k=0 而不用管&&后面的部分,因为我们是&&操作.这其实是短路.
所以结果是0 0 4(b是不会改变的)

换成你后面的表达式后,结果一样,和我上面说的一样,由于短路b是不会改变的!

你的程序刚开始是赋值a=-1,b=4,k没赋值,然后
k=(++a<0)&&!(b<=0);是个逻辑判断语句,是假命题,所以k是0,b没动,所以还是4.

b--的用法是先引用b的值,再将他的值自减一,所以输出b的时候还是输出b的原值,再将他的值减一,假如你再引用b,此时b就是3了

新买了电脑,准备对电脑分区。
用系统盘重装电脑,分了三个区之后他就显示已到分区数到上限。
在装好系统后,用计算机〉管理〉磁盘管理 进行逻辑分区也不行
但是别人的电脑可以分三个以上的
请问高手该怎么处理

b没有动过,还有&&是只要左边是0 那么它的右边是不会去计算的

明显:
a&&b 一假则假,如果a的值是0,b就不再执行了,表达式值就是0,假
a ||b 一真则真,如果a的值是1,b就不再执行了,表达式值就是1,真

先判断++a<0是假的,所以k=0,++a即a=a+1,a=0;b没有变还是4啊