C 语言(11)
11.函数
11.1 函数的参数和函数的值
11.1.1 形式参数和实际参数
函数的形参和实参具有以下特点:
1) 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
3) 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4) 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
11.1.2 函数的返回值
1) 函数的值只能通过 return 语句返回主调函数。
2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。
3) 如函数值为整型,在函数定义时可以省去类型说明。
4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为 “void”。
11.2 函数的调用
C 语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。
1) 如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。
2) 当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。
3) 如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。
4) 对库函数的调用不需要再作说明,但必须把该函数的头文件用 include 命令包含在源文件前部。
* C 语言中不允许作嵌套的函数定义。但是 C 语言允许在一个函数的定义中出现对另一个函数的调用。
11.3 局部变量和全局变量
11.3.1 局部变量
1) 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。
2) 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
3) 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。
4) 在复合语句中也可定义变量,其作用域只在复合语句范围内。
11.3.2 全局变量
外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字 extern 对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。