5.6 变量的作用域和存储类型(教案)-《C语言程序设计》同步教学(电子工业出版社)
2024-07-10
|
4页
|
97人阅读
|
59人下载
普通
内容正文:
教案用纸
第 7 周 总第 19 次 学时:2
教学班级: 课程:C语言程序设计 授课教师:刘畅
课题: 5.6 变量的作用域和存储类型
教学方法:启发式、案例式
教具:常规教具
教学目标:使同学们掌握局部变量、全局变量的作用域和存储类型
教学重点:局部变量、全局变量的作用域区别
教学难点:函数在不同文件中如何运行
主要教学内容:
5.6 变量的作用域和存储类型
5.6.1 变量的作用域
5.6.2 变量的生存期
5.6.3 变量的存储类型
课后回顾:
教案用纸
四个一:
提问:函数递归的条件
导入:我们学习了变量的定义,那么变量定义的位置不同,变量的作用域以及存储类型如何使用呢?
正文:
5.6 变量的作用域和存储类型
5.6.1 变量的作用域
在C语言中,由用户名命名的标识符都有一个有效的作用域。不同的作用域允许相同的变量和函数出现,同一作用域变量和函数不能重复。
依据变量作用域的不同,C语言变量可以分为局部变量和全局变量两大类。在函数内部或复合语句内部定义的变量,称为局部变量。函数的形参也属于局部变量。在函数外部定义的变量,称为全局变量。有时将局部变量称为内部变量,全局变量称为外部变量。
变量的作用域要注意以下几点:
(1)主函数中定义的变量只能在主函数中使用,不能在其他函数中使用。因为主函数也是一个函数,它与其他函数是平等关系。
(2)不同的函数内可以定义相同名字和内部变量,它们互不影响。
(3)形参变量属于被调函数的内部变量,实参变量属于主调函数的内部变量。
(4)在函数体内的复合语句中可以定义变量,其作用域只在复合语句范围内,这种复合语句也称为“分程序”或“程序段”。
(5)在同一源程序文件中,如果全局变量与局部变量同名,则在局部变量的作用范围内全局变量不起作用。
(6)全局变量的使用会降低函数的通用性、可靠性、清晰性,因此建议没有必要时不要使用全局变量。
5.6.2 变量的生存期
变量的生存期是指变量值在程序运行过程中的存在时间。C语言变量的生存期可以分为静态生存期和动态生存期。
一个程序占用的内存空间通常分为两个部分:程序区和数据区,数据区也可以分为静态存储区和动态存储区。
其中程序区中存放的是可执行程序的机器指令。静态存储区中存放的是静态数据,如静态常量、静态变量。动态存储区中存放的是动态数据,如动态变量。动态存储区分为堆内存区和栈内存区,堆和栈是不同的数据结构,栈由系统管理,堆由用户管理。
静态变量是指main函数执行前就已经分配内存的变量,其生存期为整个程序执行期;动态变量是在程序执行到该变量声明的作用域才临时分配内存,其生存期仅在其作用域内。
生存期和作用域是不同的概念,分别从时间和空间上对变量的使用进行界定,相互关联又不完全一致。例如,静态变量的生存期贯穿整个程序,但作用域是从声明位置开始到文件结束。
5.6.3 变量的存储类型
变量的存储类型有4种,分别由4个关键字表示:auto(自动)、register(寄存器)、static(静态)和extern(外部)。例如,在前面章节各程序中所使用的变量,它们的存储类型均为auto类型。
(
存储类型 类型名 变量名表;
)
例如:
auto int x; /*定义一个自动整型变量x,auto可省略*/
register float y; /*定义一个寄存器浮点型变量y*/
static double z; /*定义一个静态双精度浮点型变量z*/
extern long s; /*声明(不是定义)一个外部长整型变量s*/
1.自动(auto)类型
用auto定义的变量称为自动变量,可缺省auto。自动类型变量值是不确定的,如果初始化,则赋初值操作是在调用时进行的,且每次调用都要重新赋一次初值。
在函数中定义的自动变量只在该函数内有效,函数被调用时分配存储空间,调用结束就释放。在复合语句中定义的自动变量只在该复合语句中有效,退出复合语句后,便不能再使用,否则将引起错误。
2.寄存器(register)类型
用register定义的变量是一种特殊的自动变量,称为寄存器变量。这种变量建议编译程序将变量中的数据存放在寄存器中,而不像一般的自动变量那样,占用内存单元,可以大大提高变量的存取速度。
一般情况下,变量的值都是存储在内存中的。为提高执行效率,C语言允许将局部变量的值存放到寄存器中,这种变量就称为寄存器变量。
3.静态(static)类型
全局变量和局部变量都可以用static来声明,但意义不同。
全局变量总是静态存储,默认值为0。全局变量前加上static表示该变量只能在本程序文件内使用,其他文件无使用权限。对于全局变量,static关键字主要用于在程序包含多个文件时限制变量的使用范围,对于只有一个文件的程序有无static都是一样的。
局部变量定义在函数体(或复合语句)内部,用static来声明时,该变量为静态局部变量。静态局部变量属于静态存储,在程序执行过程中,即使所在函数调用结束也不释放。
静态局部变量定义并不初始化,则自动赋以数字“0”(整型和实型)或'\0'(字符型)。每次调用定义静态局部变量的函数时,不再重新为该变量赋初值,只是保留上次调用结束时的值,所以要注意多次调用函数时静态局部变量每次的值。
4.外部(extern)类型
在默认情况下,在文件域中用extern声明(注意不是定义)的变量和函数都是外部的。但对于作用域范围之外的变量和函数,需要使用extern进行引用性声明。
对外部变量的声明,只是声明该变量是在外部定义过的一个全局变量,在这里引用。而对外部变量的定义,则是要分配存储单元。一个全局变量只能定义一次,却可以多次引用。用extern声明外部变量的目的是可以在其他的文件中调用。
小结:
这节课我们学习了局部变量、全局变量的定义及其存储类型,定义函数内的变量称为局部变量,只允许定义该变量的复合语句内的语句访问。用static修饰的局部变量称为静态局部变量,可用于在本次调用与下次调用之间传递数据;定义于函数外的变量称为全局变量,用static修饰的全局变量只允许被本文件中的函数访问,而没有用static修饰的全局变量则允许同一程序任何文件中的函数访问。
备 注
先让同学们分析程序,通过案例使同学们掌握学习的目的,并且吸引学生的兴趣。
对比方式:通过局部变量与全局变量进行对比性讲解,加深同学们的印象。
注意:变量已经在第2章讲过,本节课主要讲解变量定义时的存储类型。
通过案例式的教学方法讲解局部静态变量的使用方法。
学科网(北京)股份有限公司
$$
资源预览图
1
2
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。