return :用在函数体中,返回特定值(或者是void值,即不返回值)
1)一个函数的函数名既是该函数的代表,也是一个变量。由于函数名变量通常用来把函数的处理结果数据带回给主调用函数,即递归调用,所以一般把函数名变量称为返回值。被调用函数的值只能通过return语句返回主调函数,return的返回值可以是
常量,变量,表达式。返回类型可以是指针,数组,char,int,float,double。
return 语句的一般形式为:
return 表达式;
或者为:
return (表达式);
该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个return语句,但每次调用只能有一个return 语句被执行,因此只能返回一个函数值,其它则不再执行。
2)函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以定义函数类型为准,自动进行类型转换。
3)如函数值为整型,在函数定义时可以省去类型说明,系统默认为整型。
4)不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如【例2】中函数s并不向主函数返函数值,因此可定义为:
void s(int n)
{ ……
}
一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。例如,在定义s为空类型后,在主函数中写下述语句
sum=s(n);
就是错误的。
为了使程序有良好的可读性并减少出错,凡不要求返回值的函数都应定义为空类型,但是空类型函数调用被调函数里有return则直接退出被调函数,所以void型主调函数调用被调的函数可以有return也可以没有。
【例1】
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
main()
{
int max(int a,int b);
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y);
printf("maxmum=%d",z);
}
【例2】
main()
{
int n;
printf("input number\n");
scanf("%d",&n);
s(n);
printf("n=%d\n",n);
}
int s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d\n",n);
}
5)在循环中出现return则返回当前值同时退出循环。
6)若是在主函数中出现return则会退出主程序执行。
7)return所在被调函数返回值后进入主调函数然后在被调点执行下一条指令。
8)在返回字符型常量和字符数组时有所不同因为字符型常量存于静态存储区而字符数组不算是字符型常量所以存于堆栈。详细解释如下转载博客