收藏 分享(赏)

C++第10周第1次课总第20次课.doc

上传人:fmgc7290 文档编号:4522307 上传时间:2019-01-01 格式:DOC 页数:9 大小:117KB
下载 相关 举报
C++第10周第1次课总第20次课.doc_第1页
第1页 / 共9页
C++第10周第1次课总第20次课.doc_第2页
第2页 / 共9页
C++第10周第1次课总第20次课.doc_第3页
第3页 / 共9页
C++第10周第1次课总第20次课.doc_第4页
第4页 / 共9页
C++第10周第1次课总第20次课.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、C+程序设计教案1第 10 周第 1 次课 总第 20 次课课题:变量的存储与作用域教学目标:掌握变量的存储类型与作用域教学重点:存储类型及作用域教学难点:存储类型及作用域教学方法:讲授法教学过程:【导入新课】函数是 C+程序的基本模块。通常我们将一些功能相对独立的或经常使用的操作或运算抽象出来,定义为函数,这些函数可以被重复使用,使用时只要考虑其功能和使用接口即可。在结构化程序设计中,函数是将任务进行模块划分的基本单位,这些模块可以分别单独设计调试并协作完成整个任务。而在面向对象的程序设计中,类中所封装的操作也是用函数进行描述的,因此函数在 C+程序中具有非常重要的意义。要掌握函数的使用,必

2、须理解函数调用时的内部实现机制,以及与此相关的内存分配机制、变量的生命期和作用域。【教学内容】4.3 全局变量和局部变量程序中的变量由于定义的位置不同,在程序中的可见程度是不一样的,有些变量在整个程序中都是可见的,称为全局变量;有些变量只在某些区域中可见,称为局部变量。所谓可见,指的是定义的这个变量可以被使用。要了解变量的这些属性,必须先了解变量的存储机制。4.3.1 变量的存储机制与 C+的内存布局操作系统为一个 C+程序的运行所分配的内存分为四个区域,如图 4.3 所示:堆区(动态数据)栈区(函数局部数据)(main()函数局部数据)全局数据区(全局变量、静态变量)代码区 (程序代码)图

3、4.3 程序在内存中的区域(1)代码区:存放程序代码,即程序中各个函数的代码块;C+程序设计教案2(2)全局数据区:存放全局数据和静态数据;分配该区时全部内存清零。(3)栈区:存放局部变量,如函数中的变量等;分配栈区时内存不处理。(4)堆区(heap):存放与指针相关的动态数据。分配堆区时内存不处理。栈(stack)是一种先进后出的数据结构,原理类似子弹匣,最先压入弹匣的子弹最后一个弹出。局部变量在程序执行过程中动态地获得和释放栈空间。变量获得栈空间称为变量入栈;而这些变量占据的栈空间被释放称为变量出栈。变量出栈的顺序与入栈的顺序相反,即最先分配单元的变量空间最后一个被释放。关于栈的具体内容将

4、在动态内存分配一章中介绍。4.3.2 全局变量定义在函数之外的变量称为全局变量。全局变量存放在全局数据区,如果用户在定义时不显式给出初始化值,因全局数据区分配时已将全部内存清零,所以其初始化值全 0。全局变量可定义在程序开头,也可定义在中间位置,该全局变量在定义处之后的任何位置都是可以访问的,称为可见的。如果程序由多个函数组成,其中任何一个函数修改全局变量,其他函数都将看到这个修改的结果。【例 4.5】 多个函数使用全局变量的例子。#include int n=100;void func()n*=2;void main()n*=2;coutvoid fun()auto int t=5; / f

5、un()中的局部变量,auto 可省略coutvoid main()int a,b; /函数内定义局部变量,具有函数域coutab;cout=a) /使 a 中保存大数,b 中保存小数int t; /块中定义局部变量,具有块作用域t=a; a=b; b=t; /交换 a,b 的值coutvoid swap(int,int);void main()int a,b; /a,b 作用域为 main()coutab;coutt t 3b 5 b 3swap()函数域 a 3 a 5b 5 b 5 b 5 b 5main()函数域 a 3 a 3 a 3 a 3执行 main() 调用 swap() 执

6、行 swap() 返回 main()图 4. 5 程序执行时的内存变化C+程序设计教案6void main()int i=200,j=300;coutst();at();void main()int i;for(i=0;ivoid fun2(); /外部函数声明,等价于 extern void fun2();int n; /全局变量定义void main()n=1;fun2(); / fun2()定义在文件 Ex4_11_2.cpp 中coutn=nendl;/* Ex4_11_2.cpp,由 fun2()组成*/extern int n; /外部变量声明, n 定义在文件 Ex4_11_1.

7、cpp 中void fun2() /fun2()被文件 Ex4_11_1.cpp 中的函数调用n=3;运行结果:n=32 静态存储类型静态存储类型包括静态全局变量和静态函数。在定义全局变量或函数时加说明符static,就成为静态变量或静态函数。静态存储类型的作用域与外部存储类型相反,一旦定义为静态存储类型,就限制该变量或函数只能在定义它的文件中使用。静态全局变量在编译时分配存储空间,如果定义时不指定初值,则编译系统将其初始化为全 0。一个全局变量和一个静态全局变量在使用上是不同的,其他文件通过外部变量声明可以使用一个全局变量,但却无法使用静态全局变量,静态全局变量只能被定义它的文件所独享。函数

8、与静态函数之间的区别同样。4.5.4 生命期与可见性1 生命期生命期也叫生存期。生命期与存储区域相关,存储区域分为代码区、静态数据区、栈区和堆区,相应地,生命期分为静态生命期、局部生命期和动态生命期。(1)静态生命期静态生命期指的是标识符从程序开始运行时存在,即具有存储空间,到程序运行结束时消亡,即释放存储空间。具有静态生命期的标识符存放在静态数据区,属于静态存储类型,如全局变量、静态全局变量、静态局部变量。具有静态生命期的标识符在未被用户初始化的情况下,系统会自动将其初始化为 0。函数驻留在代码区,也具有静态生命期。所有具有文件作用域的标识符都具有静态生命期。(2)局部生命期在函数内部或块中

9、定义的标识符具有局部生命期,其生命期开始于执行到该函数或块的标识符声明处,结束于该函数或块的结束处。具有静态生命期的标识符存放在栈区。具有局部生命期的标识符如果未被初始化,其内容是随机的,不可引用。具有局部生命期的标识符必定具有局部作用域;但反之不然,静态局部变量具有局部作C+程序设计教案9用域,但却具有静态生命期。(3)动态生命期具有动态生命期的标识符由特定的函数调用或运算来创建和释放,如调用 malloc()或用new 运算符为变量分配存储空间时,变量的生命期开始,而调用 free()或用 delete 运算符释放空间或程序结束时,变量生命期结束。具有动态生命期的变量存放在堆区。关于 ne

10、w 运算和 delete 运算将在指针一章介绍。2 可见性可见性从另一个角度说明标识符的有效性,可见性与作用域具有一定的一致性。标识符的作用域包含可见范围,可见范围不会超过作用域。可见性在理解同名标识符的作用域嵌套时十分直观。对于外层块与内层块定义了同名标识符的,在外层作用域中,内层所定义的标识符是不可见的,即外层引用的是外层所定义的标识符;同样,在内层作用域中,外层的标识符将被内层的同名标识符屏蔽,变得不可见,即外层中同名标识符的可见范围为作用域中挖去内层块的范围。图 4.6 显示下面程序段中变量的作用域与可见性。int m=1;float x;float m=3.5;x=5.5;m+;【课堂小结】1、 全局与局部变量;2、 变量的作用域;3、 变量的存储类型。【作业布置】本章作业习题【教学体会】把数据的存储机制都弄明白后,那么对于本次的学习还是学得懂的int m, float x 作用域int m 可见float m 不可见x 可见float m 作用域float m 可见int m 不可见x 可见图 4.6 变量的作用域与可见性

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报