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