目录
1.函数定义
形式如下:
函数头:返回值类型 函数名(参数表)
{
函数体:声明部分
语句
}
2.调用函数
函数名(参数值);
注意:不论有没有参数,()必须存在,表示起到函数调用的作用。如果有参数,则需要给出正确的数量和顺序。
•C语言中作嵌套的函数定义,但允许在一个函数的定义中出现对另一个函数的调用,即嵌套调用;
•递归调用:一个函数在他的函数体内调用它自身,这种函数称为递归函数;
例:用递归法算n!
long func(int n)
{
long f=-1;
if(n<0)printf("n<0,input error");//提示n输入错误
else if(n==0||n==1)f=1;//判断是否为结束条件
else f=func(n-1)*n;//求n!递归方式,返回其值
return(f);
}
int main(void)
{
int n;
long y;
printf("\ninput a integer number:\n");
scanf("%d",&n);
y=func(n);//调用求n的阶乘函数
printf("%d!=%ld",n,y);
}
3.从函数中返回值
return停止函数的执行,并返回一个值,这个值可以赋值给变量,可以在传递给函数,也可以丢掉
return;
return 表达式;
• 若做一个没有返回值的函数,函数名前的类型要写成void,表明这个函数不返回任何的结果,就不能使用带值的return;也可以没有return,调用的时候不能做返回值的赋值。
• 若有返回值,return后必须带值。
4.函数先后顺序
执行前一定要先声明函数,即函数原型。其构成为
函数头;
一般把它写在调用它的函数前面。
5.形参和实参
传值
每个函数都有自己的变量空间,参数也位于这个独立的空间中,和其它函数没有关系。在这个空间里的变量,是函数这次运行所独有的,称作本地变量(局部变量),参数也是本地变量。
函数的参数分为形参和实参,
形参
没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。只在函数内部有效,调用结束后返回主调函数即不能再使用;
实参
函数被调用时给出的参数有确定的值,会被函数内部的代码使用,所以称为实际参数,简称实参。其出现在主调函数中;
注:函数调用中发生的数据传送是单向的,即只能把实参的值传送给形参。因此在函数调用过程中,形参的值会发生变化,而实参的值不会改变。
6.局部变量和全局变量
变量的生存期和作用域
• 生存期:变量出现到它消亡的时间段;
• 作用域:在代码内可以访问这个变量(起作用)的范围;
局部变量:(内部变量),在函数内做定义说明的,其作用域仅限于函数内;
全局变量:(外部变量),在函数外部定义的变量,作用域是整个源程序。使用前应作声明,位置可在函数前/后、文件前/后。