回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C 语言基础教程 >> 51. 条件运算符(?:)
最 近 更 新
54. goto 语句
53. switch 语句推荐
52. continue 和 break
51. 条件运算符(?:)
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
46. if 语句
45. 循环应用实例 2
最 新 推 荐
53. switch 语句推荐
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
44. 循环应用实例 1推荐
43. 循环嵌套推荐
40. for 循环推荐
37. 关系运算符推荐
36. while 循环推荐
热 门 排 行
2. 第一个 C 程序推荐
31. 预处理指令 #define..推荐
1. C 语言简介
11. 基本数据类型:整型..推荐
24. 运算符的优先级和结..推荐
5. 如何编写函数
30. 字符串字面量推荐
13. 标识符命名规则
36. while 循环推荐
7. 第三个 C 程序推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

51. 条件运算符(?:)


来源:蚂蚁的 C/C++ 标准编程 作者:antigloss 等级:精品
发布于2007-01-28 12:13 被读3077次 【字体:

    使用条件运算符?:)可以实现 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 标准

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:C 语言运算符
巧用异或交换整型变量的值
49. 逻辑运算符

上一篇:50. if 语句嵌套
下一篇:52. continue 和 break

共有评论 8 条 网友评分 1分 查看全部评论

游客:Icioo
评分:0
不错,希望站长能坚持下去

再次感谢
游客:刚刚好
评分:0
我是初学者,在这里找到了学习的途径,而且是非常棒的途径!
很感谢你,我学到了好多,期待你能更多
游客:yellow
评分:5
顶~~希望这些东西能给我带来好运
游客:C++菜鸟
评分:5
怎么一个月了都没有更新啊!站长是不是偷懒了,呵呵
游客:antigloss
评分:0
不是我不想更新,实在是没时间啊!最近太忙了!
游客:C++菜鸟
评分:5
可以理解站长,我只是开个玩笑
游客:123
评分:0
我也学会了一些 谢谢
游客:Steve
评分:3
详细,有耐心。

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss