You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C语言条件表达式0 && (a++)==0的判定结果不为真?

问题解答

核心原因是你对C语言的运算符优先级判断错误,结合&&的短路求值特性共同导致了这个结果:

  • C语言中==相等运算符的优先级远高于&&逻辑与运算符,你写的0 && (a++)==0并不会按照你预想的(0 && (a++)) == 0的顺序执行,编译器实际会将表达式解析为等价的0 && ((a++) == 0)的运算顺序。
  • &&逻辑与存在短路求值规则:只要左侧第一个操作数的值为假(即0),就会直接终止整个表达式的求值,直接返回假,右侧的所有运算都不会执行。
  • 你的代码中条件表达式的求值过程:第一个操作数已经是0(假),直接返回0作为整个&&表达式的结果,同时(a++) == 0完全不会被执行,变量a的值也不会发生变化。
  • 最终if的判断条件为0(假),自然就会进入else分支,最后打印的a的值还是初始的0。

如果你想实现你预想的判断逻辑,只要手动加括号改变运算顺序即可:

int a=0;
if( (0 && (a++)) == 0 )
{
    printf("Inside if");
}
else
{
    printf("Else");
}
printf("%i",a);

修改后会进入if分支,不过因为短路特性,a++还是不会执行,a的最终值仍然为0。

内容的提问来源于stack exchange,提问作者Spark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:36:03