(3)在下列情况下,即在定义函数时加了说明符,包含void在内。而先定义后调用(即定义在调用之前),则调用函数之前可以说明也可以不说明。
有时为了使得系统能够检查函数调用时其参数类型是否一致,对于不必须说明函数的情况也对函数进、
5.2.1 函数的参数
C语言中,有的函数有参数,可以一个或多个,多个参数用逗号分隔,而有的函数没有参数,但是函数名后面的圆括号不可省略,例如,前面讲过的主函数main( )就是属于没有参数的函数。但是,主函数也可以有参数,后面会讲到,
函数参数分为形式参数(简称形参)和实在参数(简称实参)两种。形参是指在定义函数时,(参数表)中的参数,因为该参数在该函数被调用之前是没有确定值的,只是形式仁的参数,只有被调用时通过实参来获取值。实参是指调用函数的参数,因为该参数已具有确定的值,是实在的参数:实参可以是表达式,在调用之前先计算出表达式的值。
在实际应用中关于形参和实参的使用还应注意如下几点: (1)在定义函数时,所指定的形参在该函数被调用之前是不被分配内存单元的。只有在发生函数调用时,才给形参分配单元,井且
赋值,一旦函数调用结束后,形参所占的内存单元又被释放掉。因此,形参属于局部变量,其作用范围仅在定义它的}J数体内。 (2)函数调用时所用的实参是个具有确定值的表达式,调用时先计算表达式的值,再将其值传递给对应的形参。
(3)函数的形参是属于定义它的函数的局部变量。因此,允许一个函数的形参和实参同名,因为它们在内存中占有不同的存储单元。
(4)函数调用要求形参和实参在个数上相等,并且对应的参数类型相同。否则将会发生\个数不匹配\或\类型不一致\的错误。一般情况下,即使不报错误信息,也会造成结果不正确。
下面举一个简单的函数调用的例子,通过它进一步说明函数的定义格式,函数的说明方法和形参与实参的不同。 [例5. 1] 求两个float型数的和。 程序内容如下: main() {
float a,b,sum; float fadd(); a=5.6;
b=7,2; sum=fadd(a,b);
printf (\”,sum); }
float fadd(x,y) float x,y {
retutrt(x+y);
执行该程序输出如下结果: 12. 80 说明:
(1)该程序中定义了两个函数:main ( )和fadd ( ).前一个是主函数,它无参数,也无返回值。后一个是具有float型返回值的带有参数的函数,该函数有2个参数x和Y,它们都是float型变量。
(2)在主函数main)中,float fadd ( );这是对函数fadd()的简单说明,只说明函数的类型是float型(即返回值的类型).如果甩原型说明应采用如下格式: float fadd(#loat,float);
这种情况下,对fadd < )函数必须说明,因为该函数返回值非int型的,并且又是调用在先定义在后。如不说明、则会出现编译错,读者可以上机验证。
(3)该程序中,x和Y是fadd < )函数的两个形参,关于形参类型说明的方法,除了本程序中说明方法外,还可以采用如下方法: float fadd 即在参数表中就说明了参数的类型。但是,这种说明方法并不是所有编译系统都允许。而Tuiba C编译系统是允许的。 该程序中,a和b是fadd()函数的两个实参,在调用该函数时,a和b的值是确定的。 该程序中的函数调用时满足了形参与实参个数相等,对应类型相同的要求。 5.2.2 函数的返回值、 C语言中,有的函数带有返回值,有的函数不带有返回值。 函数的返回值都是通过return(表达式))语句来实现的。例如,在本章例5. 1中,fadd()函数的函数体中的return(x+y)十妇;语句就是将表达式x十Y的值作为返回值,返回给调用函数fadd ( )的值赋给变量sum o返回值的类型是该函数的类型。带有返回值的return语句具体实现过程如下: (1)先计算return语句中《表达式)的值, (2)根据函数的类型对哎表达式)的类型进行转换,使得(表达式》的类型转换成为函数的类型; (3)将<表达式>的值和类型返回给调用函数,作为调用函数的值和类型。一般情况下,要设置一个变量来接收这一返回值。 (4)将程序流的控制权交给调用函数,继续执行调用函数下边的语句。 在不带返回值的,turn语句中。不执行上述(1)至(3)步较,只执行(4)步魏。 函数的返回值(简称函数值)的类型是在定义函数时指出的一般情况下,除了返回值为int型的不要说明函数的类型外,对非int型返回值的函数都应指出西数值的类璧。函数遭的类型和、turn语句中表达式的类型可能不一致,这时藉要转换,即将表达式的类型转换成为函数值的类型,这种转换是自动进行的。下面通过一个实例说明当函数值的类型与return语句表达式的类型不一致的情况时是如何自动转换的。 [例5.2求] 两个输入的浮点数的和,最后的和用int型表示。 程序内容如下: main ( )