这个返回声明是什么意思

时间:2014-09-07 09:20:47

标签: c ternary-operator conditional-operator return

在本书中,这是一个简单的C函数:

char *month_name(int n)
{
  static char *name[] = {
  "Illegal month",
  "January", "February", "March",
  "April", "May", "June",
  "July", "August", "September",
  "October", "November", "December"
  };

  return (n < 1 || n > 12) ? name[0] : name[n];
}

这个函数做什么很容易理解,但是我不理解return语句,这个return语句在这里是如何工作的。

7 个答案:

答案 0 :(得分:3)

它是一个三元运算符..

condition? a: b

这意味着如果条件为真,则表达式将被处理,如果其为假,则b将被处理。

在您的代码中,它将检查n是否不在1-12范围内(月数)。如果它不在范围内,那么它将返回名称[0](即非法月份)。否则,如果它在范围内,那么它将使用n作为数组名称的索引打印月份名称。

答案 1 :(得分:2)

return (n < 1 || n > 12) ? name[0] : name[n];可以改写为:

if (n < 1 || n > 12)
    return name[0];
else
    return name[n];

因此函数返回传递给函数的n = 1 ... 12的月份名称,否则返回“非法月份”。

答案 2 :(得分:1)

? :是三元运营商。

如果n < 1 || n > 12它将返回"Illegal month"月份的其他名称。

答案 3 :(得分:1)

它被称为三元运算符,它意味着:如果n&lt; 1或n> 12,返回name[0] - “非法月份”。否则,请返回name[n] - 适当的月份。

答案 4 :(得分:1)

它等同于以下内容:

if(n < 1 || n > 12)
    return name[0];
else
    return name[n];

答案 5 :(得分:1)

扩展,返回语句等同于:

if (n < 1 || n > 12)
{
    return name[0];
}
else
{
    return name[n];
}

return语句使用三元操作,其语法如下:

(if condition)? true_return_value: false_return_value;

答案 6 :(得分:0)

虽然许多人指出这与以下内容相同:

if(n < 1 || n > 12)
    return name[0];
else
    return name[n];

这不完全正确。三元运算符是运算符,因此(n < 1 || n > 12) ? name[0] : name[n]表达式,而不是语句。更接近的例子是:

string ret_value;

if(n < 1 || n > 12)
    ret_value = name[0];
else
    ret_value =name[n];

return ret_value;

当你在事物中间需要条件时,这变得很重要:

 return String.Format("The test {0} successful", bOK ? "WAS" : "was NOT");