C语言中的条件运算符与条件表达式

3 阅读2分钟

核心一句话:条件运算符是 if-else 的极简写法,一行搞定「二选一」赋值 / 运算

一、基础认知(秒懂)

✅ 1. 条件运算符

C 语言唯一的三元运算符(需要 3 个操作数),格式固定:?:

读作:问号冒号,是一个整体,不能拆开用。

✅ 2. 条件表达式

用 ?: 拼接成的完整式子,是 if-else 的「精简替代版」,格式:

c

运行

条件 ? 表达式1 : 表达式2;

二、执行规则(人话翻译,一看就会)

✅ 计算逻辑(3 步走,超简单):

  1. 先判断「条件」是否成立(和关系表达式一样,成立 = 真 = 1,不成立 = 假 = 0);
  2. ✔️ 条件成立 → 执行「表达式 1」,整个式子最终结果 = 表达式 1 的值;
  3. ❌ 条件不成立 → 执行「表达式 2」,整个式子最终结果 = 表达式 2 的值。

💡 大白话:满足条件选前者,不满足选后者,二选一!

三、对比理解(和 if-else 对照,更清晰)

这两种写法功能完全等价,条件表达式更短小,适合简单的二选一场景。

✅ 写法 1:if-else(常规版,代码多)

c

运行

int a, res;
if (a > 60) {
    res = 1; // 条件成立,赋值1
} else {
    res = 0; // 条件不成立,赋值0
}

✅ 写法 2:条件表达式(极简版,一行搞定)

c

运行

int a, res;
res = (a > 60) ? 1 : 0; // 完全等价上面的if-else

四、实用示例(3 个高频场景,够用)

所有示例直接能跑,看完就会用,覆盖 90% 使用场景:

✅ 示例 1:求两个数的最大值(最常用)

c

运行

int x=5, y=9, max;
max = x > y ? x : y; // x>y?成立选x,不成立选y → max=9

✅ 示例 2:判断成绩是否及格

c

运行

int score=78;
// 及格输出"及格",不及格输出"不及格",一行完成判断+输出
printf("%s\n", score>=60 ? "及格" : "不及格"); // 输出:及格

✅ 示例 3:给变量赋默认值

c

运行

int age=0;
// age为0时赋值18(默认值),不为0则保留原值
age = age == 0 ? 18 : age; // age最终=18

五、核心注意事项(避坑 2 点,必看)

❌ 坑 1

?: 是一个运算符,表达式 1 和表达式 2 的结果类型要一致(比如都是数字、都是字符串),否则会报错。✅ 正确:3>5 ? 10 : 20(都是整数)❌ 错误:3>5 ? 10 : "abc"(数字 + 字符串,类型不一致)

❌ 坑 2

条件表达式适合简单二选一,如果需要在分支里写多行代码(比如多个 printf、多个赋值),千万别用它,老老实实写 if-else 更清晰。

✨ 超精简总结(3 句话记牢)

  1. 条件运算符:?:,C 语言唯一三元运算符,专门做二选一;
  2. 条件表达式:条件?值1:值2,满足选值 1,不满足选值 2;
  3. 核心用法:替代简单 if-else,一行完成「判断 + 赋值 / 运算」,更简洁。