第9章 C语言与程序设计补遗
第9章 C语言与程序设计补遗
9.1 变量的存储类别与生命期
9.2 指向函数的指针变量
9.3 带参数的主函数main
9.4 编译预处理命令
9.5 枚举类型
9.6 位运算
第9章 C语言与程序设计补遗
9.1 变量的存储类别与生命期
1. 生命期的概念
从变量生命期(即由创建到撤消)来分,可以将变量分为
静态存储变量和动态存储变量两类:
(1) 静态存储变量:在程序运行时固定分配存储空间的
变量。
(2) 动态存储变量:在程序运行中根据需要动态分配存
储空间的变量。
程序运行时对应的内存分配示意如图9-1所示。
第9章 C语言与程序设计补遗
图9-1 程序运行时对应的内存分配示意
第9章 C语言与程序设计补遗
全局变量和静态局部变量(static变量)存放在静态数据
区,程序开始执行时给它们分配内存单元,程序执行结束时
再释放这些内存单元。也即在程序的整个执行过程中这些变
量都存在(有自己的内存单元) ,它们的生命期为程序的整个
执行过程。
第9章 C语言与程序设计补遗
动态数据区存放自动局部变量、形参变量和用于中断现
场的保护数据。自动局部变量是指未加staic声明的局部变
量;形参变量是指函数的形参。在函数调用时为自动局部变
量和形参变量在动态数据区分配内存单元,当函数执行结束
时释放这些内存单元。也即在函数的整个执行过程中这些变
量都存在,它们的生命期为函数的整个执行过程。
在C语言中,每个变量都有两个属性:数据类型和数据
的存储类别。前面各章节中,我们在定义变量时只涉及它的
数据类型,其实还可以定义变量的存储类别,它决定这个变
量的存放位置(是静态数据区还是动态数据区)和生命期。
第9章 C语言与程序设计补遗
变量定义的一般形式如下:
[存储类别] 类型标识符 变量名;
其中,方括号“[ ]” 中的内容为可选项。
C语言中的变量可以有4种存储类别:自动变量、寄存器
变量、静态变量和外部变量,分别用存储类别auto、register 、
static和extern 。下面仅对自动变量、寄存器变量和静态变量
进行介绍。
第9章 C语言与程序设计补遗
2. 自动变量
在函数体内或复合语句内定义变量时,如果没有指定存
储类别或使用了“auto”存储类别,则系统都认为所定义的变
量为自动局部变量,简称为自动变量。此外,函数首部中的
形参也是自动变量。例如:
auto int a=2,b;
int a=2,b;
第9章 C语言与程序设计补遗
上述两种定义方法是等价的,即都定义了a和b为自动变
量。每当进入函数体或复合语句时,系统在动态数据区为自
动变量分配临时内存单元,退出时自动释放这些内存单元;
再次进入函数或复合语句时,系统又为它们重新分配临时内
存单元,退出时又自动释放这些内存单元。因此,释放后自
动变