原文:Ternary Operator in C Explained

开发者们可以使用三元运算符实现多个条件的判断,以取代较长的 if-else 条件语句。

三元运算符有三个参数:

  • 第一个是一个比较参数
  • 第二个是正确比较后的结果
  • 第三个是错误比较后的结果

把三元运算符看作是写 if-else 语句的一种速记方法,会有帮助。下面是一个使用 if 和 else 进行简单决策的例子。

int a = 10, b = 20, c;

if (a < b) {
    c = a;
}
else {
    c = b;
}

printf("%d", c);

这个例子需要十多行,但这并不是必须的。你可以使用三元运算符,只用三行代码就能写出上述程序。

语法

condition ? value_if_true : value_if_false

如果条件 condition 符合,语句的结果是 value_if_true,反之,结果是 value_if_false

下面是使用三元运算符改写上述例子。

int a = 10, b = 20, c;

c = (a < b) ? a : b;

printf("%d", c);

上述例子的输出结果是:

10

c 的值应该是 a,因为条件 a < b 为真。

记住,参数 value_if_truevalue_if_false 必须是相同的类型,而且它们必须是简单的表达式,而不是完整的语句。

三元运算符可以像 if-else 语句一样被嵌套。考虑一下下面的代码:

int a = 1, b = 2, ans;
if (a == 1) {
    if (b == 2) {
        ans = 3;
    } else {
        ans = 5;
    }
} else {
    ans = 0;
}
printf ("%d\n", ans);

下面是使用嵌套三元运算符重写的上面的代码:

int a = 1, b = 2, ans;
ans = (a == 1 ? (b == 2 ? 3 : 5) : 0);
printf ("%d\n", ans);

上面两个例子的结果都应该是:

3