C源程序是由函数组成的。最简单的程序有一个主函数main(),但实用程序往往有多个函数组成,由主函数调用其他函数,其他函数也可以互相调用。函数C源程序的基本模块,程序的许多功能是通过对函数模块的调用来实现的,学会编写和调用函数可以提高编程效率。
函数的定义
函数的定义通常包含以下内容:
类型 函数名(形参列表){ /*函数首部*/
说明语句 /*函数体*/
执行语句
}
函数的调用
主调函数使用背调函数的功能称为函数调用。在C语言中,只有在函数调用时,函数体中定义的功能才会执行。C语言中,一般的函数调用形式为:
函数名(类型 参数1,类型 参数2........)
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其他构造类型数据以及表达式,各实参之间用逗号隔开。
在C语言中可以通过以下几种方法来调用函数:
(1)函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是由返回值的。例如:
z=max(x,y);
是一个复制表达式,把max的返回值赋予变量z。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句。例如:
printf(“%d”,a)
scanf("%d",&b)
(3)函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求改函数必须是由返回值的。例如:
printf(“%d”,max(x,y));
在主调函数中调用某函数之前鹰骨笛该被调函数进行声明。在主调函数中对被调函数进行说明的目的是是编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值进行相应的处理。一般形式为:
类型说明符 被调函数名 (类型 形参 ,类型 形参);
需要注意的是,函数的声明和函数的定义有本质上的不同。主要区别在以下两个方面:
- 函数的定义是编写一段程序,应有函数的具体功能语句——函数体;而函数的声明仅是向编译系统的一个说明,不含具体的执行动作。
- 在程序中,函数的定义只能有一次,而函数的声明可以有多次。
变量的存储类别
1、自动变量
函数中的局部变量,如不专门声明为static存储类型,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参合在函数中定义的变量(包括在复合语句中定义的变量)都属于此类,在调用该函数是系统会给他们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。
2、外部变量
外部变量(即全局变量)是在函数的外部定义的,它的作用于为从变量定义的位置开始,到本程序结束为止。再如果外部变量不再文件的开头定义,其有效的作用范围只限于定义处到文件尾部。如果定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern 对该变量进行“外部声明”。表示该变量是一个已经定义的外部变量。
3、静态变量
有时候希望函数中的局部变量的值在函数调用结束后不消失,而保留原值,这时候就应该指定局部变量为静态局部变量,用关键字static进行声明。
4、寄存器变量
为提高效率C语言允许将局部变量的值存放在CPU的寄存器中,这种变量叫做寄存器变量,用关键字register声明。使用寄存器变量需要注意以下几点:
- 只有局部自动变量和形式参数可以作为寄存器变量
- 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量
- 不能使用取地址运算符“&”求寄存器变量地址。