C 语言中的三目运算符

三目运算符是一种比较特殊的运算符,在我们前面的总体运算符介绍中,它被归在了单独的一类,也就是其它类别。这个运算符其实更像是一个简化版的 if 语句,但是却很简洁强大。

1. 语法

语句 1 ? 语句 2: 语句 3

当语句 1 中条件成立的时候返回语句 2 的值,如果语句 1 中条件不成立,那么就返回语句 3 的值。

2. 应用场景

在你需要进行一个条件判断,有真假存在,且输出语句真假各为一行的时候就可以使用这个三目运算了。

3. 实例

#include <stdio.h>

int main()
{
    int x, y;
    x = 0;
    y = 10;
    printf("%sn", (x > y) ? "x > y" : "x < y");
    return 0;
}

运行结果:

x < y

这个语句还可以配合赋值语句使用,给变量赋值。

#include <stdio.h>

int main()
{
    int x, y, z;
    x = 0;
    y = 10;
    z = (x > y) ? 20 : 50;
    printf("%dn", z);
    return 0;
}

运行结果:

50

我们在讲述 C 语言逻辑运算的时候知道了,在 C 语言中,即使引入了布尔类型,但是在使用 printf 函数输出的时候,也是没有办法来直接输出布尔类型的,只能是通过输出整除类型来替代。如果我们想直接输出布尔类型,可以通过编写一个小的程序来扩展输出,将 0 和 1 直接替换为 false 和 true 输出。但是这样做如果输出次数很多是值得写这样一个程序的,要是只是像我们测试或者只是单次输出,那么就显得有些复杂了。这时候,我们这次介绍的三目运算符就有用武之地了。

#include <stdio.h>
#include <stdbool.h>

int main()
{
    bool x, y, z;
    x = false;
    y = true;
    printf("x = %s; y = %sn", x ? "true" : "false", y ? "true" : "false");
    z = x || y;
    printf("x || y = %sn", z ? "true" : "false");
    z = x && y;
    printf("x && y = %sn", z ? "true" : "false");
    printf("!x = %sn", !x ? "true" : "false");
    printf("!y = %sn", !y ? "true" : "false");
    return 0;
}

运行结果:

x = false; y = true
x || y = true
x && y = false
!x = true
!y = false

在上面的代码中每个 printf 函数都使用了本节介绍的三目运算符。其实就是在每个 printf 函数里都内置了一个判断语句。这个判断语句会根据传入的变量的值来进行判断,分别用 true 和 false 来替换 1 和 0 ,这样就可以实现布尔值的输出了。

4. 小结

作为 C 语言运算符中比较特殊的一员,三目运算符起到的作用更像是条件句。但是却更加的精简。当条件成立与不成立的时候分别执行冒号分隔前和冒号分隔后面的语句,而判断的条件,则是由问号与后面的语句进行分隔。这个运算符经常会嵌入语句中执行。