Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这个返回语句是什么意思_C_Ternary Operator_Conditional Operator_Return - Fatal编程技术网

C 这个返回语句是什么意思

C 这个返回语句是什么意思,c,ternary-operator,conditional-operator,return,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 >

在本书中,这是一个简单的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];
}
char*月份名称(int n)
{
静态字符*名称[]={
“非法月份”,
“一月”、“二月”、“三月”,
“四月”、“五月”、“六月”,
“七月”、“八月”、“九月”,
“十月”、“十一月”、“十二月”
};
返回(n<1 | n>12)?名称[0]:名称[n];
}

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

?:是三元运算符


如果
n<1 | | n>12
它将返回
“非法月份”
该月份的其他名称。

它被称为三元运算符,它的意思是:如果n<1或n>12,则返回
名称[0]
-“非法月份”。否则,返回
name[n]
-正确的月份。

它相当于以下内容:

if(n < 1 || n > 12)
    return name[0];
else
    return name[n];
if(n<1 | | n>12)
返回名称[0];
其他的
返回名称[n];
返回(n<1|n>12)?名称[0]:名称[n]可以重写为:

if (n < 1 || n > 12)
    return name[0];
else
    return name[n];
if(n<1 | | n>12)
返回名称[0];
其他的
返回名称[n];

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

展开后,返回语句等价于:

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

这是一个三元运算符

condition? a: b
这意味着如果条件为真,则将处理表达式a,如果条件为假,则将处理表达式b


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

许多人指出这与:

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

你不明白哪一部分?
?:运算符?您不明白该语句中的什么内容?
?:
称为条件运算符。许多人(错误地)称它为三元运算符,因为它由3个子表达式组成;但是C标准在任何地方都没有这个名字。@pmg:三元运算符是正确的(这里的确定粒子很重要):它是语言中唯一的三元运算符。它是条件运算符这一事实并不意味着它是错误的。这是一种非常冗长的编写方法。较短的是:
返回名称[n<1 | | n>12?0:n]
if(n < 1 || n > 12)
    return name[0];
else
    return 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");