第九章 函数
函数是C语言中的构建块,本质上就是一个由语句组成的小程序。有了函数,程序就可以被划分成许多小块。
函数的定义和调用
由一个案例说明函数中的一些基本概念:
double average(double a, double b)
{
return (a + b) / 2;
}
返回类型:即函数开始处放置的double,表示每次调用该函数返回的类型。
形式参数(parameter):标识符a和b
函数体:花括号里的内容。
实际参数(argument):调用函数时,传递给形式参数的表达式。
函数定义
函数定义的一般格式:
返回类型 函数名(形式参数)
{
声明
语句
}
如果返回类型很长,可以把它单独放到一行。
C89标准中,声明必须放在语句之前。
函数调用
这样调用函数:
average(x, y);
注意,圆括号不能省略,否则无法正确调用。
返回类型若非void,则会返回一个临时值,这个值可以保存到变量里,也可以丢弃。
实际参数
形式参数(parameter)出现在函数的定义中,表示函数调用时要提供的值。
实际参数(argument)是出现在函数调用中的表达式。
实际参数是通过值传递的。形参是实参的副本。
实际参数的转换
形参和实参的类型不一致时,会发生转换。应该先声明函数原型,然后再执行调用。
这种转换属于隐式转换。实际参数将会转换成形式参数的类型。
数组型实际参数
数组名可以作为函数的参数,但是函数无法得知数组的长度,只能传递第二个参数以表明长度。
通过此数组名就可以访问数组元素了。
如果形式参数是多维数组,那么必须指明列的长度:
void sum(arr[][LEN], int n);
但这种用法比较少见。
return语句
非void的函数必须用return语句来指定要返回的值:
return 表达式;
如果表达式的值得类型与返回值的类型不一致,那么会把表达式的值转换成返回值的类型。
程序终止
在main函数中执行return可以终止程序。
main函数的返回值是状态码,用于提供给操作系统,以表明程序的执行结果。正常结束返回0,异常结束返回非0值。
exit函数
另一种终止程序的办法是使用exit函数。此函数属于<stdlib.h>
头。
传递给exit的参数就是程序结束的状态码:
exit(0); // 正常终止
exit(EXIT_SUCCESS); // 正常终止,此值为0
exit(EXIT_FAILURE); // 异常终止,此值为1
递归
如果函数调用它自己,那么此函数就是递归的(recursive)。
为了防止无限递归,一定要有一个终止递归的条件。