【问题标题】:C: What does (exp1)? (exp2)? (exp3) : (exp4) : (exp5) operator do?C: (exp1) 是什么? (exp2)? (exp3) : (exp4) : (exp5) 运算符呢?
【发布时间】:2015-07-27 19:49:47
【问题描述】:

我看到 C 行看起来像 thi:

rFrameL    = block_a.available    ?
    img->mb_data[block_a.mb_addr].mb_field ?
    refPic[list][block_a.pos_y][block_a.pos_x]:
    refPic[list][block_a.pos_y][block_a.pos_x] * 2:
    -1;

这似乎是嵌套的 if 和 else 表达式,但我不知道它是如何工作的。当 (exp1) 为真时是否返回 (exp3)? 当 (exp2) 返回时 (exp4) 是否返回? 当 (exp1) 和 (exp2) 为 false 时返回 is(exp5) 吗?

【问题讨论】:

  • 您是否熟悉? : 条件运算符?你只是问在同一个表达式中多次使用它会发生什么吗?
  • 是的,我知道什么? : 运算符可以,但我不知道当我在同一个表达式中多次使用它时会发生什么。

标签: c operators


【解决方案1】:

在隐式运算顺序周围加上括号:

rFrameL    = block_a.available    ?
    (img->mb_data[block_a.mb_addr].mb_field ?
       refPic[list][block_a.pos_y][block_a.pos_x]:
       refPic[list][block_a.pos_y][block_a.pos_x] * 2):
    -1;

给定a?b:c,这意味着“将 a 评估为真,如果是则评估 b,否则评估 c”。在上面的表达式中,b 在遇到 ? 时被计算,所以它开始一个新的三元运算。遇到的第一个: 与第二个? 匹配,然后第二个: 结束对b 的评估。

【讨论】:

  • 当 (exp2) 为真时, (exp3) 为返回值。当 (exp2) 为假时, (exp4) 返回。当 (exp1) 为真时,它返回 (exp2) 和 (exp3) 表达式的结果。并且 (exp1) 为假,它返回 -1。我的理解正确吗?
【解决方案2】:

这是一个三元运算符格式的嵌套 if-else 语句。 这 '?'指的是'if',用':'中的答案解决

简单来说,下面的代码类似于三元运算符格式:

if (exp1)
{
  if(exp2)
  {
    if(exp3)
    {
      exp4;
    }
    exp5;
  }
  exp6;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    相关资源
    最近更新 更多