函数是一个完成特定工作的独立程序模块,包括库函数和自定义函数。库函数就是C语言系统定义好的函数,使用时直接调用,如scanf,printf;自定义函数是用户自己定义来实现特定功能的函数。
函数定义的一般形式为:
函数类型 函数名 (形参)
{
函数过程
}
函数调用的形式为:
函数名(实参);
定义一个自定义函数:在定义函数首部时,首先需要一个函数类型,void,int等,来告诉编译器函数的返回值是何类型。然后给我们的函数起一个名字,最好与函数的功能相对应,可以让读代码的人一目了然。最后就是定义参数:参数分为两类,形参和实参。其中形参必须定义其类型,且与主程序中调用函数的类型一致,对于变量名则不必与主程序调用中的变量一致,主要是声明类型作用。实参在函数体中,与实参的变量名对应,是函数程序中的变量。
比如定义一个函数,来查找两个数中的最大数。
int MAX(int a,int b) //函数定义,a,b为形参
{
int t;
if(a<b){ //函数体的a,b为实参
t=a; //互换啊,b的值
a=b;
b=t;
}
return a; //返回a的值
}
在主函数中调用时
void main()
{
int i,j,k;
scanf("%d%d",&j,&k); //输入两个数
i=MAX(j,k); //调用函数,实参j,k
printf("%d\n",i);
}
我们可以看到,主函数中函数调用的参数变量是j,k,但函数首部声明的却是a,b。但这样是完全可以的,因为它们都是int整形变量。通俗的说,函数调用只需保持变量类型和数目一致,是不看变量名是否一致的。
如果需要进一步解释,我们就要引入两个概念,局部变量和全局变量:
局部变量的有效范围局限于函数内部,也就是不同的函数可以有相同的变量名,它们互不干扰。因此使用好函数的第一步就是用好参数的传递。我们将主函数中的变量通过函数的调用传递到自定义函数中。
全局变量的作用范围是从程序定义开始到结束,不属于任何函数,其值在任何函数中都是一样的,因此需要定义在任何函数之前,当然也可以通过预处理#define宏定义一个全局变量。
局部变量还有一种特殊形式叫静态局部变量,它虽然使局部变量,只能作用在本函数中,但与局部变量不同之处在于,局部变量的值函数调用一次后被自动回收而静态变量的值不会因为函数调用结束被回收,它的值会一直保留到程序结束,这里说的保留并不是变量值不会改变,而是可以变很多次,但每次都会被保存下来。