本次课内容:变量的存储属性
教学目的:掌握动态、表态和外部变量的存储类型定义方法;
掌握各类型的初始化及特性。
重点:变量存储类型定义方法及特性。
难点:不同类型的应用环境及定义方法。
预习,
main()
{
int i=1,j=1;
printf(“i=%d,j=%d \n”,i,j);
{
int i,=2,k;
printf(“i=%d,k=%d \n”,i,k);
}
printf(“i=%d,j=%d \n”,i,j);
}
变量的存储属性
1、变量的存储器类型
计算机存储器
寄存器的存取速度比主存快,用于存储一些反复被加工的数据。
2、变量的生存期
(1)在编译时分配存储单元,程序执行开始后创建,程序结束后
被撤消。变量的生存期为程序执行的整个过程。
(2)只在程序执行的某一段时间内存在。如函数的形参和在函数
体或分程序中定义的变量。
(3)变量的可用域:全局可用与局部可用。
变量的存储属性分四类:寄存器 (register)、自动 (auto)、静态
(static)、外部 (extern)。
外存储器(辅存)
内存储器(主存) auto,static,extern
寄存器( CPU中的小临时存储器) register
一、动态变量
动态变量:某一时刻动态建立,另一时刻动态撤销的一种变
量。
动态变量包括:自动变量( Auto)、寄存器变量( Register)。
1、自动变量 ( auto)
自动变量定义格式,
[ auto] 数据类型 变量名 [=初始值表达式 ],… ;
前面所使用的变量都是自动变量(默认存储类型)
说明,
(1)自动变量是局部变量;
P116_4.11
(2)在对自动变量赋值前,变量值不确定;
(3)对同一函数的两次调用之间,自动变量值不保留。
P118_4.13
2、寄存器变量( register)
与自动变量有相同性质,系统将其存放于 CPU中的寄存器中。
寄存器变量只能用于函数内,且只能是整型。
P118_4.14
二、静态变量( static)
,静态”相对于动态而言。
(1)静态变量的存储空间在程序的整个运行其间是固定的,即
从程序开始到结束都是存在的。
(2)静态变量初始化是在编译时进行的。
若定义时未初始化,编译时将其初始化为 0或 0.0。
定义格式,
static 数据类型 变量名 [=初始表达式 ],… ;
(3)函数多次被调用时,静态变量的值具有可继承性。
P120_4.15
(4)静态局部变量的值只能在本函数(或分程序中)使用。
三、外部变量
1、外部变量是全局变量
定义在所有函数之外。
若定义时未初始化,编译时将其初始化为 0或 0.0。
有效范围从定义位置开始到程序尾。
P121_ P122_
2、外部变量使用的几种情况
(1)限定本文件的外部变量只在本文件中使用。
在外部变量定义前加一个 static,即静态外部变量,使其
具有局部化。
(2)将外部变量的作用域在本文件范围扩充。
对于位于定义点之前的函数,用 extern说明,其扩充到该
函数中。
P124_4.18
(3)将外部变量作用到其它文件
在需要这些变量的文件中对变量用 extern进行声明。
P125_
3、外部变量的副作用
模块间联系太多,外部依赖太多,降低独立性。
小结,
1、动态变量
(1) 自动变量 auto
(2) 寄存器变量 register
2、静态变量 static
3、外部变量
扩充 extern
在定义点之外扩充(文件内或文件外)
作业,1、编写求最大公约数的程序
2,P138_4.12