什么是“返回列表== NULL?0:列表 - >值+有趣(列表 - >下一个)”“做什么?

时间:2016-01-18 00:08:18

标签: c operators

我是编程的初学者,在学习C语言列表时,我发现了这个功能,但不知道它是做什么的。有人可以解释一下。

int fun(list_t *list) {
    return list == NULL ? 0 : list->value + fun(list->next);
}

我认为它是

的更短的if else语句
if (list == NULL)
     return 0;
else {
     return list->value;
     fun(list->next);
}

这是对的还是我误读了?

4 个答案:

答案 0 :(得分:2)

? :被称为Conditional (ternary) operator

return list == NULL ? 0 : list->value + fun(list->next);

与:

相同
if(list == NULL) {
    return 0;
}
else {
    return list->value + fun(list->next);
}

或者更清楚:

return (list->value + fun(list->next));

首先评估总和,然后返回结果。

答案 1 :(得分:0)

之前的回答已经回答了你的问题。我只是想注意一下:三元运算符可用于返回值

if(cond)
   str = "foo";
else 
   str = "bar";

使用三元,你可以写:

str = cond ? "foo" : "bar";

答案 2 :(得分:0)

代码是正确的。 在这段代码中,他们使用了Linked List,Pointer,最重要的是他们使用了条件或三元运算符。

在函数fun(list_t * list)中,他们使用条件运算符。 语法:(Condition?true_value:false_value);

返回列表== NULL? 0:list-> value + fun(list-> next);

这里NULL表示条件,0表示真实部分,list-> value + fun(list-> next)表示false部分。 最后,真值或假值将存储在变量列表中并返回。

答案 3 :(得分:0)

他们使用了条件或三元运算符。

在函数 { try { string temp = Path.Combine(Directory.GetCurrentDirectory(), @"..\Contents\text.json"); string Data = File.ReadAllText(temp); } catch { return null; } } 中,他们使用了条件运算符。

fun(list_t *list)

Syntax : (Condition? true_value: false_value);

此处return list == NULL ? 0 : list->value + fun(list->next);代表要检查的条件,list==NULL代表真实的部分,

0代表虚假部分。

最后根据条件评估,true或false值将返回给调用函数。

如果list->value + fun(list->next)为真

list==NULL将被退回

如果它是假的,0为假,则list==NULL返回加号,它会递归调用

list->value