CHAPT08函数

第八章 函 数 一个例子: 8.1 概述 说明: 8.2 函数定义的一般形式 8.3 函数参数和函数的值 8.3.1 形式参数和实际参数 当主调函数和被调用函数之间有数据传递关系时,应定义为有参函数。 在定义函数时,函数名后面括号中的变量名称为“形式参数”(简称形参). 在调用函数时,函数名后面括号中的参数(可以为常量、变量、表达式),称为“实际参数”(简称实参)。 关于形参和实参的说明: 8.3.2 函数的返回值 例 8.3 返回值类型与函数类型不同。 8.4 函数的调用 8.4.2 函数调用的方式 8.4.3 对被调用函数的说明 和 函数原型 在一个函数中调用另一个函数(即被调函数)应具备什么条件? 被调用的函数必须是已经存在的函数(库函数或用户自己定义的函数)。但仅有这一 条件还不够。 如果是使用库函数,一般应该在程序的开头用 #include命令将调用有关库函数时所需的信息“包含” 到本文件中来。 如前面已用过的:#include stdio.h #include math.h 如果使用用户自定义的函数,并且该函数与调用它的函数(即主调函数)在同一个文件中,一般还应在主调函数中对被调函数作声明(declaration),即向编译系统声明将要调用此函数,并将有关信息通知编译系统,以便于检查。 说明: 8.5 函数的嵌套调用 程序执行示意图: 作 业 (1) P186 8.1 8.3 8.6 函数的递归调用 例8.9 Hanoi(汉诺塔问题) 汉诺塔程序: 8.7 数组作为函数参数 二、 数组名作函数参数 注意: 三、 多维数组名作函数参数 作 业 (2) p186: 8.5 8.6 8.13 8.17 8.8 局部变量和全局变量 说明: 8.8.2 全局变量 有关全局变量的说明: 8.9 变量的存储类别 按变量的作用域和存在域,可将变量分为局部变量 和 全局变量。 还可以从变量值存在的时间(即生存期)角度来分,将变量分为 静态存储方式变量 和 动态存储变量方式。 静态存储方式 是指在程序运行期间分配固定的存储空间的方式。 动态存储方式 是在程序运行期间根据需要进行动态的分配存储空间的方式。 内存中供用户使用的存储空间分为三部分,如下图所示: 数据分别存放在静态存储区和动态存储区: 全局变量全部存放在静态存储区中,在程序开始执行时,给全局变量分配存储区,程序执行完毕就释放。 在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。 C语言中每一个变量和函数都有两个属性:数据类型和数据的存储类别。 数据的存储类别指的是数据在内存中存储的方法。 8.9.2 auto局部变量 8.9.3 静态局部变量(static) 对静态局部变量的说明: 需要定义局部静态变量的情况: 8.9.4 register 变量 8.9.5 用extern 声明外部变量 8.9.6 用static 声明外部变量 8.9.7 关于变量的声明和定义 8.9.8 存储类别小结 8.10 内部函数和外部函数 8.10.2 外部函数 8.11 如何运行一个多文件的程序 函数要点 函 数习 题 8.9.1 动态存储方式与静态存储方式 在动态存储区存放以下数据: ①函数形参变量; ②局部变量; (未加 static 说明的局部变量,即自动变量) ③ 函数调用时的现场保护和返回地址。 对这些数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间。 动态存储区 静态存储区 程序区 用户区 全局变量 局部变量 存储方法分为两大类:静态存储类和动态存储类。 具体包含四种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。 根据变量的存储类别,可以知道变量的作用域和生存期。 函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的。 分配和释放存储空间的工作是系统自动进行的,因此称为自动变量。自动变量用关键字auto 作存储类别声明。 例如: int f (int a) /* 定义函数 f( ) ,a 为形参 */ { auto int b , c ; /* 定义 b,c为自动变量 */ ….. } 关键字auto 可以省掉,auto不写则隐含为“自动存储类别”。 例如: int f (int a) { int b , c ; …. } 即 auto int b , c ; 如果希望函数中的局部变量的值在函数调用结束后仍然保留,作为下一

文档评论(0)

1亿VIP精品文档

相关文档