九、函数

一、形式参数

       在定义函数时后面括弧中的变量       例:int max ( int a,int b )

       不占内存中的存储单元,只有发生函数调用时才被分配内存单元,调用结束后内存单元也被释放

二、实际参数

       实参和形参的类型应相同或赋值兼容,如果不相同则会进行转换

       实参向形参传递数据是“值传递”(相当于copy),是单向传递,只由实参传给形参

       调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留原值

       在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数的实参的值


三、返回值

       如果需要从被调用函数带回一个函数值供主调函数使用,被调用函数中必须包含 return 语句

       如果不需要从被调用函数带回函数值可以不要 return 语句

       返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型    例: int max ( float x , float y )   函数值为整型

     (在 C 语言中,凡不加类型说明的函数,自动按整型处理)      

       在定义函数时指定的函数类型一般和 return 语句中的表达式类型一致,如果不一致,以函数类型为准,自动转换

四、函数的调用

九、函数九、函数

九、函数

       被调用的函数必须时已经存在的函数

       如果使用库函数,文件开头用 #include 命令将调用有关库函数时所需用到的信息包含到本文件中来

       如果使用自己定义的函数,而该函数的位置在调用它的函数的后面,应该在主调函数中对被调用的函数作声明

五、函数的嵌套调用

      C语言不能嵌套定义函数,但可以嵌套调用函数


九、函数九、函数


六、递归

       在调用一个函数的过程中又出现直接或间接的调用该函数本身,这是C语言的特点之一 

       递归必须要有一个退出的条件,通常用 if 来判定

       九、函数

七、局部变量和全局变量

1、 局部变量:

      a. 自动变量,即动态局部变量(离开函数,值就消失)

      b. 静态局部变量(离开函数,值仍保留)

      c. 寄存器变量(离开函数,值就消失)

      (形式参数可以定义为自动变量或寄存器变量)

2、全局变量:

      a. 静态外部变量(只限本文件引用)

      b. 外部变量(即非静态的外部变量,允许其他文件引用)


      主函数中定义的变量也只能在主函数中有效,主函数也不能使用其他函数中定义的变量

      不同函数中可以用相同名字的变量,它们代表不同的对象,互不干扰

      形式参数也是局部变量

      在函数内定义的变量时局部变量,在函数之外定义的变量成为全局变量

      全局变量可以在本文件中其他函数所共用

      定义局部变量时不赋初值的话,编译时自动赋值为 0 ;如果不对自动变量赋初值,则自动赋值成一个不确定的值

      不用全局变量的原因:

      a. 全局变量在程序的全部执行过程中都占存储单元

      b. 使用全局变量过多,会降低程序的清晰性

      c. 使函数通用性降低

八、变量的存储类别  (C语言中每一个变量和函数有两个属性:数据类型和数据的存储类别)

1、  静态存储

       包括:静态局部变量(函数内有效)   静态外部变量(本文件内有效)  外部变量(其他文件可引用)

       程序运行开始时由系统分配固定的存储空间

       用 static 声明局部变量:局部变量的值在函数调用结束后不消失而保留原值

九、函数九、函数九、函数九、函数

2、  动态存储

        程序运行期间根据需要进行动态的分配存储空间

        包括: 自动变量,寄存器变量,形式参数  (都是本函数内有效)

九、关于变量的声明和定义

       定义性声明:需要建立存储空间( in a ;)

       引用性声明:不需要建立存储空间( extern a ;) 

       声明包括定义,但非所有的声明都是定义