1、在C语言的程序设计时,通常将一个大的程序功能分成若干个较小的模块,每个模块编写成结构清晰,接口简单,容易理解的程序段,即函数。这种方法就叫做模块化的程序设计方法
2、函数的定义包括函数的包括函数的声明和函数的实现。函数的声明包括返回类型,函数名称和形参列表,函数的实现即是在函数声明后面的花括号里面包含的内容。函数的定义格式如下:
返回类型 函数名称(形式参数表){
说明语句序列
可执行语句序列
}
函数的定义的例子:
int power(int di,int zhi) { int result = 1; int i = 0; for(;i < zhi; i++) { result *= di; } //1、返回值给调用者; //2、结束整个函数 return result; }注意:①函数名是唯一标识一个函数的名字,在一个程序中,不同的函数其名字不能相同。
②函数的类型可以是除函数和数组外的任何类型,对于一个具体的函数而言,它的类型是唯一的,并且通常与函数的返回值类型一致,当类型为void时,函数没有返回值。
③形式参数用于调用函数和被调用函数之间的数据传递,需要进行类型说明,形参可以使空的,也可以是由多个形参组成。当形参列表中有多个形参时,每个形参之间用逗号隔开。
④函数的定义应当在函数调用之前,如果要定义在调用之后,则应当在前面声明一次。
⑤C语言中函数没有从属关系, 不能嵌套定义,各函数之间是独立的。
3、函数的参数
①无参函数:在调用无参函数时,主调函数不将数据传递给被调用函数,无参函数可以带或者不带返回值。
②有参函数:在调用函数时,在主调函数和被调函数之间有数据传输。
③定义函数式的参数称为形参,形参在函数未被调用时没有确定值,只是形式上的参数,调用函数时的参数称为实参,实参可以是变量、常量、表达式,有确定的值。函数定义时,形参不占用内存,在发生调用时,才分配内存,并接受实参传来的值。
④函数的形参和实参个数要求相等,对应类型一致,且顺序要相同
⑤形参用于调用函数和被调函数之间的数据传递,因此需要类型说明
4、数据传递的形式:
①值传递。例子如下
#include<stdio.h> void function1(int a) { a++; printf("函数内:%d\n",a); } void main() { int num = 10; function1(num); printf("调用后:%d\n",num); } 执行结果: 函数内:11 调用后:10②地址传递(如数组),例子:
#include<stdio.h> void function2(int a[]) { a[0]++; printf("函数内:%d\n",a[0]); } void main() { int num[1] = {10}; function2(num); printf("调用后:%d\n",num[0]); } 执行结果: 函数内:11 调用后:115、数组作为函数参数
数组名作为函数参数时,实参数组的长度必须是确定的,而形参数组的长度可以是不确定的,但是数组名后面的[ ] 不能省略,在引用时,形参数组的长度不得超过实参数组的长度。
数组作为函数参数的例子:
//求数组元素的和 #include<stdio.h> #define N 10 int fun(int b[]) { int s = 0, i; for(i = 0; i < N; i++) { s += b[i]; } return s; } void main() { int a[N] = {1,2,3,4,5,6,7,8,9,10}; printf("call fun: s = %d\n",fun(a)); } 执行结果: call fun:s = 556、函数的返回值
①无返回值的函数:void类型的函数。一般用来执行指定的一组
②有返回值的函数:调用函数后,可以通过函数名待会函数值供主函数调用
函数的返回值语句的格式:
return 表达式; 如return 0;