" expr1的解释? expr 2:expr 3"?

时间:2014-03-17 03:48:46

标签: c operators

我很难理解这句话:

for( int i=0; i< out_length; i++){

     int num=i < length_a ? array_a[i] : 0;

...
...
我用Google搜索的内容:

  

expr1? expr2:expr3

     

如果expr1的计算结果为非零值,则计算expr2,否则计算   评估expr3。整个表达式的值是哪个   永远的expr2或expr3被评估(这意味着expr2和expr3的类型)   expr3必须相同)。

但是我仍然感到困惑,如果您可以将该声明转换为某些 if-else 块,将会有所帮助,感谢您的帮助..

8 个答案:

答案 0 :(得分:6)

expr1? expr2:expr3

等价如果是:

if(expr1)
{
   //Evaluate expr2
}
else
{
   //Evaluate expr3
}

因此,您在代码中的语句评估为:

int num=i < length_a ? array_a[i] : 0;

装置

if(i<length_a)
{
   num = array_a[i];
}
else
{
   num = 0;
}

答案 1 :(得分:4)

EXP1? exp2:exp3

解析为

if(exp1){  //if exp1==1
    exp2    //do this
  }
else{       //if exp2==0
    exp3    // do this
 }

答案 2 :(得分:3)

int num=i < length_a ? array_a[i] : 0;

相当于

int num;

if(i<length_a)
    num = array_a[i];
else
    num = 0;

答案 3 :(得分:3)

表达式

int num=i < length_a ? array_a[i] : 0;

相当于

if(i < length_a)
    num = array_a[i];
else
    num = 0;

换句话说,如果第一部分评估为真,则整个表达式等于第二部分;然而,如果第一部分评估为假,则整个表达式等于第三部分。

这是一个三元运算符,而不是二元运算符。

有关?:运算符的更多信息,请访问:http://en.wikipedia.org/wiki/%3F:#C

答案 4 :(得分:2)

基本上,您想知道的代码与:

相同
int num;
if (i < length_a) {
    num = array_a[i];
} else {
    num = 0;
}

答案 5 :(得分:2)

int num=i < length_a ? array_a[i] : 0;

这转化为

int num;

if (i < length_a)
{
  num = array_a[i];
}
else
{
  num = 0;
}

第一部分是条件:i < length_a。如果此计算结果为true,则返回第二部分:array_a[i]。如果第一部分的计算结果为false,则返回第三部分和最后一部分:0

答案 6 :(得分:0)

我希望您的代码如下

for( int i=0; i< out_length; i++){
 int num=i < length_a ? array_a[i] : 0;
}

如果你想要if else ...那么这就是代码。

 for( int i=0; i< out_length; i++)
{
   if(i<length_a)
  {
     int num = array_a[i];
  }
  else
  {
     int num = 0;
  }
}

我的代码非常简单,可以让您轻松理解代码,我希望这正是您所寻找的......并且可能会帮助您了解如何以这两种方式进行编码。

答案 7 :(得分:0)

int num = i&lt; length_a? array_a [i]:0;

这里'num'的值处理条件......即,

当'i'的值小于'length_a'时,num = array_a [i]

否则,当'i'大于或等于'length_a'时,num = 0