C语言三元运算符语法解析及表达式求值疑问
C语言三元运算符表达式解析
变量初始值
int a=36, b=20, c=30, d;
第一个表达式解析:d = c?(a? a: c):(b? c: b);
C语言中三元运算符的核心规则:条件表达式只要是非0值,就会被判定为“真”,并非只有1才算真。拆解执行步骤:
- 最外层判断:
c的值是30(非0),因此执行冒号左侧的子表达式(a? a: c) - 内层子表达式判断:
a的值是36(非0),因此执行冒号左侧的a,取值为36 - 最终
d被赋值为36
第二个表达式解析:d = (a>b) ? ((a>c)? a: c): ((b>c)? b: c);
这个表达式的逻辑是取a、b、c三个数中的最大值,验证步骤:
- 外层判断
a>b:36>20结果为真,执行冒号左侧的子表达式((a>c)? a: c) - 内层子表达式判断
a>c:36>30结果为真,执行冒号左侧的a,取值为36 - 最终
d被赋值为36,和第一个表达式结果一致
内容的提问来源于stack exchange,提问作者AndrewN
相关产品推荐
相关产品推荐

