一、函数概念及基本特征
也就是一段可以重复使用的代码。C语言本身自带许多库函数,当然我们也可以自己编辑函数。
函数的一个明显特征就是使用时带括号( ),必要的话,括号中还要包含数据或变量,称为参数(Parameter)。参数是函数需要处理的数据,例如:
strlen(str1)用来计算字符串的长度,str1就是参数。
puts("C语言中文网")用来输出字符串,"C语言中文网"就是参数。
还有一点就是函数一定要有返回值,也就是函数的执行结果。
二、函数的格式
那么我们自己定义的函数是什么样的呢?定义函数的格式为:
返回值类型 函数名()
{
函数体
}
返回值可以是任意的数据类型,例如int、float等。
函数名是标识符的一种,命名规则和标识符一样,以字母或下划线开始,函数后面的括号()不能少。
函数体是函数需要执行的代码,即使只有一个语句也要{}包围。
函数定义时给出的参数称为形式参数,简称形参;函数调用时给出的参数(传递的数据)称为实际参数,简称实参。函数调用时,将实参的值传递给形参,相当于一次赋值操作。 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
三、递归函数
一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。
看一个简单的例子:求斐波那契数列(第一项为1,第二项为2,后一项等于前2项之和)的第n个数的值。
代码如下:
1 #include <stdio.h>
2
3 int func(int n);
4
5 int main()
6 {
7 int n;
8 scanf("%d",&n);
9 printf("%d\n",func(n));
10 return 0;
11 }
12
13 int func(int n)
14 {
15 if(n == 1 || n == 2)
16 return n;
17 return func(n-1) + func(n-2);
18
19 }
在定义了func()函数之后,在函数体中我们再次调用func()函数,反复调用自身也就称为递归。
四、全局变量和局部变量
定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。几点说明:
1) 在 main 函数中定义的变量也是局部变量,只能在 main 函数中使用;同时,main 函数中也不能使用其它函数中定义的变量。
2) 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
3) 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。
4) 在语句块中也可定义变量,它的作用域只限于当前语句块。
全局变量
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。
注意:1、在局部变量作用的范围内,局部变量有效,全局变量被“屏蔽”不起作用。
2、C语言中的函数只能有一个返回值,以此想要得到函数返回的多个值,可以使用全局变量。