赋值运算符可用于if语句吗?为何if(b=5)未触发报错?
赋值运算符能在if语句里使用吗?
这绝对是C语言初学者最容易懵的问题之一,我来给你拆明白:
核心结论:赋值运算符可以用在if语句里
C语言里的赋值表达式是有返回值的——它会返回赋值完成后变量的最终值。而if语句的条件只需要一个“能被判定为真假”的值:在C里,非零值被视为真,零被视为假。
所以你写的if(b=5)完全合法:它先把5赋值给b,然后返回5(非零),所以if的条件成立,会执行后续的a--代码。
拆解你给出的代码运行逻辑
先把代码贴出来方便分析:
#include <stdio.h> int main() { int a=10, b=10; if(b=5) a--; printf("%d, %d", a, b--); return 0; }
一步步看执行过程:
- 初始化阶段:
a=10,b=10 - 进入if判断:执行
b=5,此时b的值被改成5,这个表达式的返回值是5(非零),所以条件为真,执行a--,a变成9 - 执行printf:这里的
b--是后置递减运算符,会先把当前b的值(5)传递给printf输出,之后再把b减到4 - 最终输出结果是:
9, 5
注意:这很容易成为BUG!
虽然语法合法,但绝大多数时候写if(b=5)都是手滑——本来想写相等判断if(b==5)。所以很多编译器(比如GCC)会给你一个警告:suggest parentheses around assignment used as truth value,意思是建议你加括号明确这是故意用赋值当条件,比如写成if((b=5)),避免别人(包括未来的你)误以为是笔误。
内容的提问来源于stack exchange,提问作者user13495933
相关产品推荐
相关产品推荐

