C语言程序设计2函数与变量
第9章 函数与变量 9.1 函数定义 9.2 函数定义与使用 9.3 变量的作用域 9.4 变量的存储类型 9.5 内部函数和外部函数 9.1 函数定义 C源程序是由函数组成的。虽然在前面的示例程序中都只有一个主函数main(),但在实际编程中往往有多个函数组成。函数是C源程序最基本的模块,相当于其它高级语言的子程序。C语言提供了极为丰富的库函数,库函数相当于标准程序。编写程序就是编写函数以及使用库函数。各个函数之间为模块化关系。 可从不同的角度对函数分类。 9.1.1 根据来源定义 从定义的角度把函数分为库函数和用户定义函数。 1 库函数 库函数由系统提供,无须用户定义,也不必在程序中作类型说明,但必须在程序最前面使用包含有该函数原型的头文件。 库函数如:printf、scanf、getchar、putchar、gets、puts。 2 用户定义函数 由用户自己编写的函数。它不仅要在程序中定义,而且必须在调用它的函数模块中进行类型说明。 9.1.2 根据返回情况定义 把函数分为有返回值函数和无返回值函数两种。 1 有返回值函数 函数被调用执行完后将向调用者返回一个执行结果,称为函数返回值。如数学函数即属于此类函数。 用户定义的有返回值的函数,必须在函数定义和函数说明中明确返回值的类型。 2 无返回值函数 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。由于函数无返回值,在定义时可指定它为“空类型”, 空类型的说明符为“void”。 9.1.3 根据参数传递定义 从主调函数和被调函数之间数据传送的角度可分为无参函数和有参函数两种。 1 无参函数 调用函数与被调函数之间没有数据传送。则此类函数在定义、说明及调用中均不带参数。 2 有参函数 调用函数与被调函数之间有数据传送。则此类函数在定义、说明及调用中均带参数。 函数是C语言的核心,而所有的函数在定义时是平等关系(包括主函数main在内),所谓平等是指:在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。这与其它语言的子程序关系十分不同。这叫做“函数定义的外部性”。 函数之间允许调用,也允许嵌套调用。甚至可以自己调用自己(称为递归调用)。但是,对主函数main函数而言,可以调用其它函数,而不能被其它函数调用。C程序的执行总是从main函数开始,完成对其它函数调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有、也只能有一个主函数main。 习惯上把调用者称为主调函数。被调用者称为被调函数。 9.2 函数定义与使用 9.2.1 无参函数定义的一般形式 无参函数定义通常采用如下形式: 类型说明符 函数名() { 函数内部变量类型说明; 语句序列; } 类型说明符和函数名称为函数头。 类型说明符指明了本函数的类型,就是函数返回值的类型。函数名是由用户定义的标识符。{}中的内容称为函数体,这是函数的核心。 函数体中的类型说明用来说明函数体内部所用变量的类型。 若不要求无参函数有返回值,则函数类型符可以写为void。 【例9-1】(见课本) 9.2.2 有参函数定义的一般形式 有参函数定义通常采用如下形式: 类型说明符 函数名(形式参数列表) { 函数内部变量类型说明; 语句序列; } 1 函数类型 就是函数返回值的类型。系统默认为int,故对int或char型可以不定义类型。 对于不需要返回值的类型,则应定义为空函数,即函数类型为:void。 2 函数名 函数的标识,即给不同的函数起不同的名字。函数名应符合C语言对标识符的规定。 3 形式参数列表 形