说明:
(1)一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。一个源程序文件可以为多个C程序共用。
(2)一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明与定义等) 。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的,而不是以函数为单位进行编译的。
(3)函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。main函数是被操作系统调用的。
(4)空函数占一个位置,等以后扩充新功能时用一个编好的函数代替它,这样做,程序的结构清楚,可读性好。
(5)函数调用可以作为另一个函数调用时的实参。
m=max(a,max(b,c));
(6)函数不能嵌套定义,但可以嵌套调用和递归调用
函数定义:
1、无参函数:
类型名 函数名(){
函数体
}
或
类型名 函数名(void){
函数体
}
2、有参函数:
类型名 函数名(形式参数表列)
{
函数体
}
调用函数
函数名(实参表列)
说明:
(1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在调用时,形参被临时分配内存单元。
(2)值传递,单向传递:将实参对应的值传给形参。形参有值后,就可以利用形参进行有关的运算。调用结束后,形参单元被释放。实参单元不会随形参的改变而改变,仍保留并维持原值,没有改变。这是因为实参和形参是两个不同的存储单元。
(3)return语句后面的括号可以不要,后面的值也可以是一个表达式。
函数声明
在函数声明中的形参名可以省写,而只写形参的类型。
数组作为函数参数
1、数组元素作为函数实参,不能作形参。
2、数组名作为函数参数(包括实参和形参)。用数组元素作实参时,向形参变量传递的是数组元素的值。而用数组名作为函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址。
3、多维数组名作为函数参数。在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。在第2维大小相同的前提下,形参数组的第1维可以与实参数组不同。C语言编译系统不检查第一维的大小。
int array[3][10];
int array[ ][10];
int array[ ][ ];//不合法
int array[3][ ];//不合法
#include<stdio.h>
int main()
{
int max_value(int array[][4]);
int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};
printf("Max value is %d\n",max_value(a));
return 0;
}
int max_value(int array[][4])
{
int i,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max) max=array[i][j];
return(max);
}
说明:
(1)float average(float array[ ])//定义average函数,形参数组不指定大小。因为编译系统并不检查形参数组大小,只是将实参数组的首元素的地址传给形参数组名。
(2)用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素的地址传递给形参数组,这样两个数组就共占同一段内存单元。形参数组中各元素的值如发生变化会使实参数组元素的值同时发生变化。