首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C语言中的条件运算符(?:)用法

C语言中的条件运算符(?:)用法

   使用条件运算符(?:)可以实现 If Else 的功能,其一般形式为:

        Exp1 ? Exp2 : Exp3

显而易见,条件运算符(Conditional Operator)有三个操作数,故我们将其称为三目运算符(Ternary Operator)。条件运算符是 C 语言中唯一一个三目运算符。我们把上面这个表达式称为条件表达式。这个条件表达式的意思是,如果 Exp1 为真,则运算 Exp2,整个条件表达式的值为 Exp2 的值;反之,则运算 Exp3,整个条件表达式的值为 Exp3 的值。例如:

        X > Y ? Printf("X Is Bigger!
") : Printf("X Is Not Bigger Than Y") ;

与这个语句等效的 If Else 形式如下:

        If ( X > Y )

        {

            Printf("X Is Bigger!
");

        }

        Else

        {

            Printf("X Is Not Bigger Than Y");

        }

又如:

        X = ( (Y > Z) ? Y : Z );

正如前面所说的那样,如果  Y > Z 为真,则上述语句中的条件表达式的值为 Y 的值;反之,则其值为 Z 的值。也就是说,如果 Y > Z 为真,则 X 得到 Y 的值;反之,则 X 得到 Z 的值。与之等效的 If Else 形式为:

        If ( Y > Z )

        {

            X = Y;

        }

        Else

        {

            X = Z;

        }

其实,上面这个条件表达式中的括号通通可以去掉,有没有括号的结果都是一样的。因为关系运算符 > 的优先级比条件运算符 ?: 高,所以就算不用括号括住 Y > Z,Y 和 Z 也是结合在一起的;又因为 ?: 的优先级比 = 高,所以就算不用括号括住 (Y > Z) ? Y : Z,这三个操作数也是结合在一起的。因此,

        X = Y > Z ? Y : Z ;



        X = ( (Y > Z) ? Y : Z );

是等效的。不过,后者的可读性当然比前者好得多。

    C 语言规定条件运算符的运算顺序是从左到右,即先运算 ? 左边的操作数,然后根据该操作数的真假性决定运算 ? 右边的两个操作数中的哪一个。例如:

        Exp1 ? Exp2 : Exp3

先运算 Exp1,如果 Exp1 为真,则运算 Exp2;反之,则运算 Exp3。Exp2 和 Exp3 中只有一个会被运算,或者是 Exp2,或者是 Exp3,这由 Exp1 的真假性决定。

    ? 左边的操作数运算完后的时间点是一个序列点,你可以简单地理解为 ? 是一个序列点。
返回列表