Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18689731
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-03-20 18:54:36

来源: 作者:antigloss 等级:精品
发布于2007-01-28 12:13 被读2698次 【字体: 】

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

        exp1 ? exp2 : exp3

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

        x > y ? printf("x is bigger!\n") : printf("x is not bigger than y") ;

与这个语句等效的 if else 形式如下:

        if ( x > y )
        {
            printf("x is bigger!\n");
        }
        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 的真假性决定。

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

参考资料:C Primer 5th Edition
           C99 标准

本文版权归 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。

阅读(717) | 评论(0) | 转发(0) |
0

上一篇:50. if 语句嵌套

下一篇:52. continue 和 break

给主人留下些什么吧!~~