账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    C语言的条件表达式从右向左结合怎么理解
    • 2019-10-24 00:00
    • 10
    46
    0

    例子:
    z = (a == b ? a : b ? c : d);
    我知道这个例子,从右向左结合的话,会是:
    z = (a == b ? a : (b ? c : d));
    从左向右结合的话,会是:
    z = ((a == b ? a : b) ? c : d);

    另一个例子:
    a = b = c
    等价于
    a = (b = c)

    那我是不是可以理解成这个结合性相当于给先结合的东西加上括号,也就是优先级变高了。放到第一个例子里就是先计算
    b ? c : d
    但是我用过下面这个例子测试

    int c = 0;
    int test = c == 0? printf("1\n"):(c=2)?(c = 3):printf("4\n");
    printf("%d",c);

    结果输出1,我知道按照规范不能再条件表达式中有赋值语句,但这只是为了测试执行顺序,结果说明它是先从最左边的1开始运算的。
    真诚求助!

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • ゛柠檬加醋 普通会员 1楼

      在C语言中,条件表达式是通过“与”(&&)、“或”(||)、“非”(!)和“短路”(||=)四种操作符结合在一起的。

      1. “与”(&&):两个操作符的组合表示“如果两个操作数都为真,则结果为真”,即“两个条件都满足则结果为真”。

      2. “或”(||):两个操作符的组合表示“如果两个操作数中至少有一个为真,则结果为真”,即“两个条件中至少有一个为真则结果为真”。

      3. “非”(!):两个操作符的组合表示“如果操作数为假,则结果为真”,即“操作数为假则结果为真”。

      4. “短路”(||=):如果操作数为假,那么两个操作符都会返回假,此时无需进行判断,直接返回结果。

      条件表达式的结合方式如下:

      • 如果第一个操作数为真,则第二个操作数返回真,然后执行第二个操作数,如果第二个操作数为真,则第一个操作数返回真,以此类推,直到第一个操作数为假。

      • 如果第一个操作数为假,则第二个操作数返回假,然后执行第一个操作数,如果第一个操作数为假,则第二个操作数返回假,以此类推,直到第一个操作数为真。

      • 如果两个操作数都为假,则直接返回假,因为在这种情况下,没有条件需要判断。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部