首页 > 编程笔记 > C语言笔记 阅读:67

C语言?:条件运算符的用法(非常详细)

通义灵码

在 C语言中,条件运算符(也称为三元运算符)是唯一的三目运算符,用来根据条件的真假选择性地返回两个值中的一个。

条件运算符的语法格式如下:

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


它的执行流程是:

  1. 计算 条件表达式,判断其真假。
  2. 若为真(非 0),整个表达式的值是 值1
  3. 若为假(0),整个表达式的值是 值2


条件运算符可以看作是 if else 语句的简洁替代形式,它的运算结果可以直接用于赋值或作为表达式的一部分。条件运算符在代码中非常灵活,常用于赋值、初始化或简单判断场景。


【实例】基本用法。
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int a = 10, b = 5;
  5. int max = (a > b) ? a : b;
  6. printf("较大值是:%d\n", max);
  7. return 0;
  8. }

输出结果:

较大值是:10

a > b 为真,返回 a(10),赋值给 max


注意,条件运算符是“短路求值”的,只计算必要的部分。例如,若条件为真,值2 不会被计算。


【实例】短路求值。
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int x = 1, y = 0;
  5. int result = (x > 0) ? 10 : y++;
  6. printf("result = %d, y = %d\n", result, y);
  7. return 0;
  8. }

输出结果:

result = 10, y = 0

x > 0 为真,返回 10,y++ 未执行,y 保持 0。

条件运算符的使用场景

1) 简单赋值

条件运算符常用于根据条件直接赋值。

  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int score = 85;
  5. char* grade = (score >= 60) ? "及格" : "不及格";
  6. printf("成绩:%s\n", grade);
  7. return 0;
  8. }

输出结果:

成绩:及格

2) 嵌套使用

条件运算符可以嵌套,替代多重 if else

  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int num = 0;
  5. char* sign = (num > 0) ? "正数" : (num < 0) ? "负数" : "零";
  6. printf("数字是:%s\n", sign);
  7. return 0;
  8. }

输出结果:

数字是:零

num > 0 为假,进入 (num < 0) ? "负数" : "零"num < 0 也为假,返回 "零"。

3) 表达式中嵌入

条件运算符可以嵌入其他表达式中,增强灵活性。

  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int a = 3, b = 7;
  5. printf("结果:%d\n", a + ((a < b) ? b : a));
  6. return 0;
  7. }

输出结果:

结果:10

a < b 为真,返回 b,计算 a + b = 10

与if else的对比

特性 条件运算符 if else
代码长度 简洁,一行完成 多行,适合复杂逻辑
适用场景 简单选择赋值 复杂条件和多语句
可读性 短表达式清晰,嵌套时较差 逻辑清晰,适合长代码

条件运算符的注意事项

1) 类型一致性

值1值2 的类型应兼容,编译器会尝试统一类型。

  • // 可能有警告
  • int x = (a > b) ? 10 : 3.14; // int 和 double 不完全兼容

建议:保持类型一致,或显式转换。

2) 可读性

嵌套过多会导致代码难以理解,建议用 if else 替代复杂逻辑。

  • // 不推荐
  • int r = (a > b) ? (b > c) ? b : c : (a > c) ? a : c;

3) 副作用控制

避免在 值1值2 中使用自增等副作用操作,可能因短路求值未执行。

  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. int x = 0, y = 5;
  5. int z = (x > 0) ? x++ : y++;
  6. printf("z = %d, y = %d\n", z, y);
  7. return 0;
  8. }

输出结果:

z = 5, y = 6

x > 0 为假,执行 y++x++ 未执行。

总结

C语言的条件运算符 ?: 是一种简洁高效的选择工具,适合替代简单的 if else 语句。

阅读完本文,恭喜你已经彻底掌握了 C语言条件运算符的用法。

相关文章