- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.4 变量的存储类型 在2.2 节中,我们已经介绍,变量的类型,不仅是数据类型,还包括体现其物理特性的存储类型。在C语言中,指定变量的存储类型(又称存储类别)实质上是指定变量的存储空间。在计算机中,用于存放程序和数据的物理单元有寄存器和存储器(RAM)。寄存器速度快,但空间少,在C语言中,只能用于存放立即参与运算、可以随时更新的少量数据。而存储器容量大,一个C程序在其运行期间,其程序和数据主要被存放在存储器的用户区中,所占用的存储空间,可分为如图6.7的三个部分,其作用分别为: · 程序区:用于存放当前运行的程序代码; · 静态变量区:存放全局变量(外部变量); · 动态变量区:程序运行时,系统为其开辟一个栈,该栈用于存放函数调用时的现场信息(如寄存器的值、返回地址等)、auto数据和函数的返回值等。 存储在静态变量区中的变量,在程序编译阶段就被分配存储单元,在程序运行结束时才被撤消,相对于程序,他是永存的。而存储在动态变量区中的变量,是在程序运行到该变量所在的区域时,才被动态分配存储单元;该区域运行结束,即被撤消,相对于程序,其生存期是暂存的。 6.4.1 变量的作用域 在Turbo C2.0中, 变量的不同定义形式和位置,使变量具有不同的有效范围,称作变量的作用域,又称变量在此作用域内“可见”。在函数体或复合语句内定义的变量,其作用范围只能在所处的函数或复合语句内有效。一旦超出范围,该变量就不起作用。在函数首部中定义的形参,也只能在所处的函数中起作用。由于这此变量的作用范围有限,故称他们为局部变量。而在函数外部定义的变量,其作用范围比较宽,称为全局变量。 1.局部变量 局部变量也称内部变量。他是在一个函数中或复合语句内定义的变量(包括形参)。其作用域仅限于函数内或复合语句内,即在被定义的函数内或复合语句内可见。除了静态变量外,其生存期和所在函数或复合语句一致,离开该函数或复合语句后,这种变量就从内存中释放掉,不再起作用。 2.全局变量 全局变量又称外部变量,他是在函数外部定义的变量。他不属于哪一个函数,可以被整个源程序文件中的所有函数所共享。其默认作用域是从定义位置开始到整个源程序结束。在函数中使用全局变量,一般应作全局变量说明。全局变量的说明符为extern。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。? 本程序中定义了三个全局变量S1、S2、S3,用来存放三个面的面积。由于,他们被定义在程序的前部,因此,其作用域为整个程序。另外,在两个函数中又各自定义了作用于本函数的一些局部变量。函数vs()用来求正方体的体积。函数的返回值为体积v,与主函数中的v同名,但两者不是同一个变量。由主函数完成长宽高的输入及结果输出。由于C语言规定函数只有一个返回值,因此,函数vs()不能通过内部变量同时将1个体积、3个面积之值返回给主调函数,这里选择了返回体积v,其余3个值通过全局变量S1、S2、S3实现函数间的数据传递。 6.4.2 变量的存储类型 变量的存储类型变量的一种属性。这一属性具体反映在变量的作用域和生存期。若一个变量在程序运行的某一时刻存在,则该时刻就称为该变量的生存期。生存期和作用域是从时间和空间两个不同的角度对变量特性的描述,这两者既有联系,又有区别。 在C语言中,对变量的存储类型说明有4种:自动变量、寄存器变量、静态变量和外部变量。其中,自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。下面分别介绍以上四种存储类型: 1、自动变量(auto型) 自动变量是C语言程序中使用最广泛的一种存储类型。自动变量是一种分配在动态变量区中的局部变量。他在函数调用开始时动态地分配存储空间,并在函数运行结束就自动释放所占存储空间,因此,称为自动变量。他是C语言的默认存储类型,在函数(包括复合语句)中的形参和凡未加存储类型说明的变量均为自动变量。在前面各章程序中所定义的变量几乎都是自动变量。 自动变量的定义形式为: [auto]数据类型变量名表; 其中,auto为自动变量的存储类型标识符,可省略。 2、寄存器变量(register型) 我们经常把频繁使用的变量定义为register,该变量的值被存放在CPU的一个寄存器中。因而,不需要访问内存,可以直接从寄存器中读/写数据。由于对寄存器的读写速度高于对内存的访问,因此能提高程序的运行速度。 寄存器变量的定义形式为: register 数据类型变量名表; 其中,register为寄存器变量的存储类型标识符,不可省略。 寄存器变量属于动态存储方式。在程序设计时,可将须作频繁访问的循环控制变量及循环体内反复使用的变量定义成寄存器变量。 【例6.13】测试二重循环体的运行时间。 De
文档评论(0)