130 likes | 261 Views
第五讲 函数. 参考书 《C 程序设计 》 第七章. 本讲主要内容. 函数的定义 函数的调用 函数间的数据传递 变量的存储类型 变量的作用范围 内部函数和外部函数. 若无参数,写 void 。. 是被初始化的内部变量, 寿命和可见性仅限于函 数内部。. 若不说明类型,一律自 动按整型处理。. 函数的定义. 语法形式 类型标识符 函数名(形式参数表) 形式参数说明 { 说明部分 语句 }. 函数的调用. 调用前先说明函数原型: 在调用函数的说明部分按如下形式说明:
E N D
第五讲 函数 参考书《C程序设计》第七章
本讲主要内容 • 函数的定义 • 函数的调用 • 函数间的数据传递 • 变量的存储类型 • 变量的作用范围 • 内部函数和外部函数
若无参数,写void。 是被初始化的内部变量, 寿命和可见性仅限于函 数内部。 若不说明类型,一律自 动按整型处理。 函数的定义 • 语法形式 类型标识符 函数名(形式参数表) 形式参数说明 { 说明部分 语句 }
函数的调用 • 调用前先说明函数原型: • 在调用函数的说明部分按如下形式说明: 类型标识符 被调用函数名 (含类型说明的形参表) • 调用形式 函数名(实参) • 嵌套调用 • C语言不允许嵌套定义,但可以嵌套调用 • 递归调用 • 函数直接或间接调用自身 例 1 例 2 例 3
函数间的数据传递——三种传递方式 • 返回值 • 参数 • 全局变量
内部函数和外部函数 • 内部函数 • 只能被本文件中其它函数所调用,定义形式:static 类型标识符 函数名(形参表) • 外部函数 • 可以为其它文件调用,定义形式:extern 类型标识符 函数名(形参表)extern缺省时隐含为外部函数 • 调用文件中也要用extern说明 • 举例 • P139 例7.22
作 业 • 复习:第七章 • P141 7.8, 7.11, 7.15, 7.17 • 预习:第九章
函数的返回值 • 通过 return 语句返回。 • return 语句只能把一个返值传递给调用函数。 • 返回值的类型为定义的函数类型,若 return 语句中表达式类型与函数类型不一致,则转换为函数类型。 • 返回值可以是数值,也可以是地址。当返值是地址时,应该用指针接受它。 • 无返回值的函数,定义为 void 类型。
函数间的参数传递 • 在函数被调用时才分配形参的存储单元。 • 实参可以是常量、变量或表达式。 • 实参类型必须与形参相符。 • 传递时是传递参数值,即单向传递。 • 使用地址作为参数,可以返回函数处理结果。 • 数组作为参数时的情况。 • 数组元素作实参,与单个变量一样。 • 数组名作参数,形、实参数都应是数组名,类型要一样,传送的是数组首地址。 例 4
使用全局变量传递数据 在所有函数之外说明的变量是全局变量,它在所有函数中都是可见的。 利用全局变量的这个特性,可以在函数间传递数据 注:变量的类型和作用范围
变量的存储类型 • auto(自动)型 • 存放在堆栈区域中。属于一时性存储,其存储空间可以被若干变量多次覆盖使用。 • register(寄存器)型 (一般情况下不必这样指定) • 存放在CPU的通用寄存器中 • long,double,float不能设为register型,因为超过寄存器长度 • static(静态)型 • 存放在一般内存区域中
变量的作用范围 例 5 • 局部变量 • 在函数内部说明的变量 • 可以是: auto型、register型 —只能是局部变量static型 —全局寿命、局部可见性 • 缺省为auto型 • 全局变量 • 在所有函数之前说明的变量 • 可以是: static型—只允许在本程序文件中引用 缺省型—可以被其它文件中的函数引用 但要在引用函数中用 extern 说明. 例 6
不同类型变量的初始化 • auto和register变量若被初始化,则每当进入该程序块后,都执行该变量的初始化赋值功能。 • 没有进行初始化的auto和register变量,其初值不定,不能直接在程序中使用。 • static和全局变量若不初始化,自动赋0。 • static和全局变量初始化时必须用常量为其赋初值,auto和register变量初始化时可以用常量或变量赋初值。 • static型局部变量的初始化仅执行一次 • extern型的变量不能进行初始化 例 7