【问题标题】:Statement with ? in C [duplicate]声明与?在 C [重复]
【发布时间】:2011-05-15 15:38:40
【问题描述】:

可能重复:
How do I use the conditional operator?

我是 C 语言的新手,在我正在查看的一个示例代码中,我遇到了这样的声明:

A = A ? B: C[0]

我只是想知道上一条语句的任务是什么,执行上述语句后的结果是什么。

【问题讨论】:

标签: c syntax ternary-operator


【解决方案1】:

如果A 为真,则将B 的值分配给A,否则为C[0]

?:

【讨论】:

    【解决方案2】:

    如果 A 存在(非 NULL),则 A 被分配给 B,否则为 C[0]。

    【讨论】:

    • -1 A 的不存在使代码甚至无法编译。 A 可以是NULL0(整数)、0.0(双精度)等...
    • B 被分配给 A。
    • 我认为如果我说的不是 NULL,我指的是指针,而不是 double、int 等。A 被分配给 B,反之亦然。
    • @Neil:B 不会用这个问题中的表达式改变值。 C ... A(可能)也不会改变价值。
    • A 被分配给 B。我在什么时候说 B 改变了(或者甚至 C 改变了)? A 承担 B 的价值就是我的意思。
    【解决方案3】:

    它被称为ternary operator。如果expr 为真,expr ? a : b 返回a,如果为假,则返回bexpr 可以是布尔表达式(例如 x > 3)、布尔文字/变量或任何可转换为布尔值的东西(例如 int)。

    int ret = expr ? a : b 等价于:

    int ret;
    if (expr) ret = a;
    else ret = b;
    

    三元运算符的好处是它是一个表达式,而上面是语句,您可以嵌套表达式但不能嵌套语句。所以你可以做ret = (expr ? a : b) > 0;之类的事情

    作为一个额外的花絮,Python >=2.6 的等效操作语法略有不同:a if expr else b

    【讨论】:

      【解决方案4】:

      result = a > b ? x : y; 与此块相同:

      if (a > b) {
        result = x;
      }
      else
      {
        result = y;
      }
      

      【讨论】:

        【解决方案5】:

        if else 声明相同。

        可以改写为:

        if ( A != 0 )
        {
            A = B;
        }
        else
        {
            A = C[ 0 ];
        }
        

        【讨论】:

          【解决方案6】:

          如果 A 等于 0 则 A = C[0] 否则 A = B

          【讨论】:

            猜你喜欢
            • 2023-03-12
            • 2011-08-29
            • 2015-06-30
            • 2016-10-22
            • 1970-01-01
            • 1970-01-01
            • 2014-02-06
            • 2017-08-10
            • 1970-01-01
            相关资源
            最近更新 更多