1,函数简介
任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。
2,函数定义
函数一般定义的形式如下:
类型标识符 函数名(形式参数表)
{声明部分
语句
}
其中形式参数表可省略,构成无参函数。
3,函数的返回值
函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。
注意:
1)函数的值只能通过return 语句返回主调函数。
2)函数值的类型和函数定义中函数的类型应保持一致。
3)不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。
举例:
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
4,函数的参数
函数的参数分为形参和实参两种。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
注意:
1)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3)实参和形参在数量上,类型上,顺序上应严格一致。
4)函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
#include <stdio.h>
int m(int a,int b)
{
<span style="white-space:pre"> </span>a++;
<span style="white-space:pre"> </span>b++;
<span style="white-space:pre"> </span>printf("%d,%d",a,b)
}
int main()
{
<span style="white-space:pre"> </span>int x,y;
<span style="white-space:pre"> </span>printf("input two numbers:\n");
<span style="white-space:pre"> </span>scanf("%d%d",&x,&y);
<span style="white-space:pre"> </span>m(x,y);
<span style="white-space:pre"> </span>printf("%d,%d",x,y);
}
其中x、y传递给a、b的只是值,a、b变化不能影响到x、y
5,函数的调用
C语言中,函数调用的一般形式为:函数名(实际参数表)对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
在C语言中,可以用以下几种方式调用函数:
1)函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。
例如函数max
#include <stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y);
printf("maxmum=%d",z);
return 0;
}
2)函数语句:函数调用的一般形式加上分号即构成函数语句。
例如函数m
#include <stdio.h>
int m(int a,int b)
{
a++;
b++;
printf("%d,%d",a,b)
}
int main()
{
int x,y;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
m(x,y);
printf("%d,%d",x,y);
}
3)函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。
例如:
#include <stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int x,y;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
printf("maxmum=%d",max(a,b));
return 0;
}
注意:
1)在主调函数中调用某函数之前应对该被调函数进行声明,这与使用变量之前要先进行变量说明是一样的。
2)当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。