wz0526z 发表于 2018-3-6 12:40:23

a=0,b=0,c=0;a++&&b++||c++; 结果为什么是a=1,b=0,c=1;

本帖最后由 wz0526z 于 2018-3-6 12:42 编辑

# include <stdio.h>

int main(void)
{int a,b,c;
a=0,b=0,c=0;
a++&&b++||c++;
   printf("a=%d,b=%d,c=%d\n",a,b,c);
   return 0;
}

结果为什么是a=1,b=0,c=1;

BngThea 发表于 2018-3-6 12:44:41

关键在这一句
a++&&b++||c++;
等价于
(a++&&b++) || c++;
执行时,先a&b,此时a为0,并执行a++
由于逻辑短路,作为为假,所以不管右侧,所以a为1,b为0
然后执行或的右侧c++,c自增1,变为1

wz0526z 发表于 2018-3-7 22:35:15

BngThea 发表于 2018-3-6 12:44
关键在这一句
a++&&b++||c++;
等价于


a++不是先a赋值吗?怎么最后会为1?

SHARK_8 发表于 2018-3-7 22:46:42

执行&&之后已经a已自增1了

wz0526z 发表于 2018-3-7 22:56:23

SHARK_8 发表于 2018-3-7 22:46
执行&&之后已经a已自增1了

谢谢,已经明白了!

BngThea 发表于 2018-3-8 08:53:32

wz0526z 发表于 2018-3-7 22:35
a++不是先a赋值吗?怎么最后会为1?

后置++是先拿出值来处理,最后自增
页: [1]
查看完整版本: a=0,b=0,c=0;a++&&b++||c++; 结果为什么是a=1,b=0,c=1;