欢迎来到天天文库
浏览记录
ID:50043089
大小:325.00 KB
页数:82页
时间:2020-03-08
《C及C++程序设计 第3版 教学课件 张富 第10章-数据的存储类型.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章数据的存储类型本章介绍C语言对变量规定的一些存储类型。其中要涉及变量的生存期,变量的作用域,可见性,局部变量和全局变量等一些重要概念。变量在内存中的存储10.1局部变量和全局变量10.2变量的存储类型10.3内部函数和外部函数10.4动态存储单元10.5修饰符const10.6小结10.710.1变量在内存中的存储系统为运行程序,在内存中为数据的存储开辟了两块区域:静态数据区和动态数据区。分配在静态数据区的变量,叫做静态变量,分配在动态数据区的变量叫做动态变量。变量从在数据区建立到被撤销,这段时间称为变量的生存期。C程
2、序在编译时,有些变量分配到静态数据区。分配在静态数据区的变量,在程序运行结束前是一直存在的。这样的变量的生存期为程序的运行期。有些变量是在程序运行期间根据需要动态地分配到动态数据区的,在适当的时候会将这种动态变量的空间收回。所以,动态变量的生存期是有限的。变量在程序的某一部分是有效的,而在另一部分可能是无效的,不可见的。有的变量可能在整个程序文件中一直有效的。对于上述情况,我们说变量有不同的作用域。所谓变量的作用域,就是指变量的使用范围。从作用域这个角度讲,变量区分为局部变量和全局变量。全局变量分配在静态数据区,而局部变量则根
3、据需要可能分配在动态数据区,也可能分配在静态数据区。10.2局部变量和全局变量根据作用域的不同,变量分为两种类型:局部变量,全局变量。10.2.1局部变量在任何一个代码块内定义的变量叫做局部变量。所谓代码块就是在一对花括号内的代码段,包括函数体,函数体内的语句块。局部变量只能在说明它的代码块内使用,局部变量的作用域,限于说明它的代码块内:从说明的地方开始至所在的代码块结束。局部变量在没有初始化或没有被赋值之前,它的值是不确定的。形参也是局部变量。它的作用域和使用规则与函数内部的局部变量完全一样。10.2.2全局变量作用域是从定
4、义点开始直到程序文件结束的变量,称为全局变量。全局变量在程序的整个运行过程中,都占用存储单元,而不像局部变量那样,只有在它的作用域范围内才存在。整个程序文件设置全局变量的好处就在于,增加了函数间传递数据的渠道。【例10-2】求下面一元二次方程的根:要求在这个程序中,方程的系数a,b,c设置为局部变量,方程的根X1,X2和根的虚部q和实部p都设置为全局变量,b2−4ac的值d也设置位全局变量。三种根(两个不同的实根,两个相等的实根和两个虚根)分别由三个函数计算。图10-1计算一元二次方程根的流程图使用全局变量也有负面的影响。全局
5、变量使得函数的执行依赖于外部变量。降低了程序的通用性。程序设计的模块化要求各模块之间的“关联性”要小。全局变量不符合这个要求。模块化设计希望函数是封闭的,通过参数与外界发生联系。10.3变量的存储类型在静态和动态两大类存储方法中,C语言将变量的存储类型分为四种,它们的存储类型说明符和名称如下。auto自动变量static静态局部变量extern外部变量register寄存器变量在变量定义语句中,存储类型符放在它所修饰的数据类型前面,其一般形式如下:存储类型符数据类型符变量名表;10.3.1局部变量的存储定义1.自动变量(aut
6、o)在函数内定义的或在函数的语句块内定义的变量,若存储类型省略或写为auto,都是自动变量。此前的程序中使用的都属于自动变量。因此,下面的两条变量定义语句是等价的:inta,b;autointa,b;自动变量属于动态存储类。系统在函数运行时自动为其动态分配空间。离开它的作用域时系统释放(收回)它的存储空间。因此,自动变量的生存期就是程序进入其作用域期间。例如,局部于某函数的自动变量,在调用该函数时,变量在动态存储区被分配存储空间。函数调用结束后,变量的存储空间被释放。变量的值当然也不存在了。这就是变量的生存期。自动变量在初始化
7、前,或没有赋值前,它的值是不确定。2.静态局部变量(static)有时希望局部变量的值,在每次离开其作用范围后不消失并且保持原值,占用的存储空间不释放。这时,应该用存储定义符static将变量定义为静态局部变量。例如,在函数内的语句:staticintnum1,num2;定义变量num1和num2为静态局部变量。静态局部变量属于静态存储类型,在静态存储区为其分配存储空间。在整个程序运行期间都不释放,变量的生存期是程序运行期。虽然静态局部变量的存储空间在整个程序运行中都保持着,但是,在它的作用域以外,仍然是不能被引用的。函数的静
8、态局部变量值可以在函数的两次调用之间保持值不变。表10-1给出前四次调用函数numbers(void)的运算情况。通过表10-1可以看到程序的运行结果是怎样得到的。3.寄存器变量(register)如果变量在程序运行中使用非常频繁,则为存取该变量要消耗很多时间。利用寄存器操作
此文档下载收益归作者所有