C语言函数
本篇文章将围绕以下几个方面说明函数用法:
- 函数的声明与定义
- 函数的调用
- 函数的传参
- 递归函数
- static关键字在函数中作用
①函数的声明与定义
函数的声明和定义不是一回事情。函数的声明主要是用来给编译器看的,编译器会跟据你的函数声明 来判断后续的定义和调用是否正确。定义则主要是给程序员自己看的,我这个函数要完成哪些任务,执 行哪些操作都是在函数的定义里完成的。
//下面一个例子便是声明和定义分开
1 #include <stdio.h>
2 int myFun(int a,int b);//在声明的时候形参也可以只给类型
3 int main()
4 {
5 int sum;
6 sum = myFun(7,8);
7 printf("%d",sum);
8 getchar();
9 return 0;
10 }
11 int myFun(int a,int b)
12 {
13 return a+b;
14 }
函数的声明格式:函数类型 函数名(形参表列);
函数类型是C语言中的数据类型的一种,它表示函 数执行完之后,函数所返回的值的类型是之前声明的函数类型。就像上面例子返回的就是整型的(a+b)的 值。函数名是自己定义的和C语言变量名一样,遵循相同规则。形参表列就是函数外传递给函数里的参数。
函数的定义的格式和声明相同,唯一就是需要写出函数的执行过程并且形参表列必须既写类型又写形 参变量名字来方便在函数中使用。
②函数的调用
函数调用方法,正如上面例子所写的一样,myFun(7,8); 。但是函数调用之前必须已经存在函数的声 明。函数名字括号里可以是变量也可以是数但是要和函数声明里的形参类型和数目相匹配。否则编译会不 通过。如果函数有返回值,也可以用相应类型的变量作接收处理。
③函数的传参
在声明和定义之中写的参数是形参,调用函数在函数名括号里面写的是实参。
在程序执行函数的时 候,系统会为形参分配内存,并且把实参的值赋值给形参供函数内部使用。在函数执行完成之后,系统为形 参分配的内存将会被释放。我们将无法在函数外面访问其内部的参数。
//函数传参的示例
1 #include <stdio.h>
2
3 void move(int a,int b)
4 {
5 a=7;
6 a=8;
7 printf("在函数内部a=%d,b=%d\n",a,b);
8 }
9
10 int main()
11 {
12 int x = 5;
13 int y = 6;
14 move(x,y);
15 printf("在函数外部x=%d,y=%d\n",x,y);
16 getchar();
17 return 0;
18 }
④递归函数
一个函数中可以调用另一个函数,当然一个函数中也可以调用它本身。递归函数比较体现数学的规律性, 对理解程序很方便。
一个递归函数的要点有两点需要注意:1.必须有让函数递归停止调用的变量2.函数 要调用它自身。
//利用递归求n!
1 #include <stdio.h>
2
3 int myFun(int n)
4 {
5 if(n==1)
6 return 1;
7 else
8 return n*myFun(n-1);
9 }
10
11 int main()
12 {
13 printf("%d",myFun(3));
14 getchar();
15 return 0;
16 }
⑤static关键字在函数中作用
在函数内部定义变量时如果加上static关键字,其实它已经是全局变量了。但是这个变量虽然和全局变 量在同一块存储区,但是它只是声明它的函数专属的,别的函数无法访问。简而言之,就是它在函数执行完 成一次之后,那个变量的内存不会被释放,之后再次进入函数仍可访问。
//static关键字
1 #include
2
3 void printhello()
4 {
5 static int count = 1;
6 printf("Hello,这是我说的第%d次了!\n",count);
7 count ++;
8 }
9
10 int main()
11 {
12 printhello();
13 printhello();
14 printhello();
15 getchar();
16 return 0;
17 }