我很难理解这句话:
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 块,将会有所帮助,感谢您的帮助..
答案 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