内容正文:
6.3 函数的参数和返回值
6.3.1 函数的参数
6.3.2 函数的返回值
函数的参数和函数的返回值是函数的两个重要属性。参数是主调函数和被调函数交换数据的接口。对于带参数的函数在函数调用时都必须进行参数传递,主调函数要将参数传给被调函数,被调函数根据调用函数传过来的参数进行计算和处理,最后将运算结果返回给调用函数。而函数返回给主调函数的运算结果就是函数的返回值。
6.3.1 函数的参数
在C语言中,参数是函数之间进行信息交换的渠道,参数的形式多样,在用法和用途上都有较大差异。
(1)参数的类型
在C语言中,函数有如下两种类型的参数。
· 形式参数:定义函数时,函数名后面的圆括号中列出的参数,简称形参。例如:
int max (int x,int y);
· 实际参数:在函数调用表达式中,函数名后面的圆括号中列出的参数,简称实参。例如:
a=max(a,40);
(2)参数的传递
在一个程序中实参与形参总是一一对应的,它们的参数个数相等,对应参数的类型相同。在程序的执行过程中,参数由实参向形参传递数据。下面结合实例来说明参数的传递过程。
6.3.2 函数的返回值
当实参将参数值传给形参后,即可执行该函数对应的操作,函数的执行情况主要有以下两种。
· 在函数中完成一些打印操作和信息显示输出等任务,不需要返回结果给主调函数,这类函数的类型为void。
· 在执行相应的函数操作后,还要将函数运行结果返回给主调函数,主调函数使用返回值做进一步运算。这类函数带有返回值。要使1个函数返回1个确定的值,就必须要用return语句。
(1)在以前的例子中已经用到了return语句,return语句的格式如下:
return(表达式);
或者:
return 表达式;
或者:
return;
(2)对return语句的用法做如下说明。
· return语句中的“表达式”的值就是函数返回给主调函数的值。
· 当程序执行到return语句时,立即退出函数的执行返回主调函数。一个函数中可以包含多个return语句,但是在1次函数调用中只会有1个被执行。
· return语句中也可以不包含表达式,其作用只是使流程返回主调函数,这时并不返回确定的值。如果函数不需要返回值,则可以在定义函数时使用void类型。
· 函数要返回值必须具有1个确定的类型。例如1个函数可以返回一个整型、实型或字符型的数值。这主要在函数定义时在通过类型标识符指定。
· 函数的返回值必须与函数定义的“类型标识符”一致或者兼容,若类型不一致,则以函数的类型标识为准进行转换,返回1个与函数的类型标识符一致的值。建议尽量使其一致,避免系统的自动转换和人为所造成的数据误差或者错误。
6.4 函数的调用
6.4.1 函数调用的一般形式
6.4.2 函数调用
一个C程序由1个主函数和若干个函数组成,因此,C程序是一系列被定义函数的集合体。1个函数可以被主函数main()调用,也可以被其他函数调用。各函数之间可以相互调用。同一函数可以被1个或多个函数任意调用多次。
6.4.1 函数调用的一般形式
在讲函数的调用之前,先回顾一下函数的定义,以免混淆两者之间的差异。
函数的定义为
类型标识符 函数名(形参表列)
{
函数体
}
而函数调用的一般形式为
函数名(实参表列);
两者的区别有如下几点。
(1)函数的定义中有“类型标识符”而函数的调用中没有。
(2)函数的定义中的参数为“形参”,而函数的调用中的参数为“实参”。
(3)函数的定义后没有“;”,而函数的调用中有“;”(函数作为实参除外)。
6.4.2 函数调用
1.函数的调用方式
函数调用的目的是:当主函数运行到某处需要实现某个特定的功能时,执行函数调用,函数调用完毕后,返回主调函数继续向下执行程序。在C程序中,主要有以下3种函数调用方式。
(1)函数语句:把函数调用单独作为一个语句使用。
如前面例子中:
star (b);
YesNo(char ch);
等都是函数调用语句。
这种情况下主调函数通常不需要被调函数返回数值。
(2)函数表达式:函数出现在一个表达式中,这种表达式称为函数表达式。
如前面表达式中的:
c=math(a,b);
k=number(c);
等都是函数表达式的用法。
这种情况下主调函数通常需要被调函数返回1个确定的结果。
(3)函数参数:把函数调用的结果作为另一个函数的参数。例如:
m=max(a,min(b,c));
其中“min(b,c)”是1次函数的调用,它的返回值将作为另一次函数调用的实参。这种形式较为复杂。为了增强程序的可读性,建议读者在学习的过程中用以下的语句代替该例:
n=min(b,c);
m=max(a,n);
有关函数的注意事项如下。
· 调用函数时,函数调用语句中的函数