2016-01-18 71 views
0

我是编程的初学者,在C中学习列表的时候,我发现了这个函数,不知道它在做什么。请有人解释一下。什么是“return list == NULL?0:list-> value + fun(list-> next)”呢?

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

我认为它

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

一个较短,如果else语句这是正确的还是我误读了吗?

+2

部分正确 - 如果list!= NULL,则返回'list-> value + fun(list-> next)'的总和。 –

+0

在你的第二个片段'fun(list-> next);''将不会被调用,因为之前的行中有'return'语句。 – alk

+0

供您参考:http://port70.net/~nsz/c/c11/n1570.html#6.5.15 – alk

回答

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)); 

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

0

上一个答案已经回答你的问题。我只想说明一个区别:三元操作符可以用来返回一个值

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

使用三元,你可以这样写:

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

代码是正确的。 在这段代码中,他们使用链表,指针和他们使用条件或三元运算符的最重要。

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

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

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

0

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

在功能fun(list_t *list)他们使用条件运算符。

Syntax : (Condition? true_value: false_value);

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

这里list==NULL表示要检查的条件,0代表真正的一部分,

list->value + fun(list->next)代表虚假的部分。

最后根据条件评估值的真或假值将返回到调用函数。

如果list==NULL是真的

0将返回

如果是假的即list==NULL是假的,那么list->value是回报加上它会使到

fun(list->next)递归调用。

相关问题