- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 函数中的变量 在本章的学习中,要重点掌握以下内容: 生存期和作用域的概念; 全局变量和局部变量的概念和区别; 变量屏蔽的方式; 存储变量的各个存储区的作用和区别; auto变量、static变量、register变量和extern变量的使用与区别。 12.1 生存期和作用域 C程序中的所有变量都有一定的生存期和作用域。生存期是指程序运行时,变量占有内存的时间。变量作用域是指在程序中,变量可以被使用的有效代码区域。本节将讨论变量的生存期和作用域的相关概念,并且介绍全局变量的使用,以及同名变量和变量屏蔽的问题。 12.1.1 生存期 生存期是指程序运行时变量占有内存的整个时期。当程序运行到变量的定义语句时,编译器为其分配内存,这是它的生存期的开始;当变量占用的内存被释放时,则标志着生存期的结束。 12.1.1 生存期 12.1.2 作用域 作用域是指变量可以被使用的代码区域。只有在变量的有效作用域内,变量才是可以被访问的。在变量作用域之外使用变量是非法操作,编译器会对这种行为报告错误。变量可以在main函数内定义,可以在自定义的函数内定义(包括形参),也可以定义在所有函数的外部,还可以在各个函数内部的复合语句中定义。不同位置定义的变量作用域是不一样的。 变量作用域的大小由它所在的程序块决定。如前所述,程序块就是复合函数,也就是在C语言中使用花括号对({})分隔出来的代码块。为了便于讨论变量的作用域,按程序块间的关系将程序块分为4类:本层程序块、上层程序块、下层程序块和外部程序块。分别定义如下。 12.1.2 作用域 本层程序块:即程序块本身。 上层程序块:如果程序块A放在程序块B内部,那么B为A的上层程序块;同时,B的所有上层程序块也为A的上层程序块。 下层程序块:如果程序块A内部含有B程序块,那么B为A的下层程序块;同时,B的所有下层程序块都为A的下层程序块。 外部程序块:如果程序块B不是程序块A的以上三种程序块的任何一种,那么B就是A的外部程序块。 12.2 局部变量和全局变量 在C语言中,根据变量的作用范围,可以将变量分为局部变量和全局变量两种。两种变量在使用特点和应用中都有很多差别,本章将详细讲解。 12.2.1 局部变量 局部变量是指作用域无法涵盖整个代码区的变量。在C语言中,函数体中定义的变量,即函数的内部变量也是局部变量之一。 需要注意的是,由于局部变量的生存期在函数调用完成后就结束,因此每次调用时的局部变量都是新生成的、并拥有不同内存空间的变量。像这种只是临时有效的变量,也称为“临时变量”。作为一个临时变量,局部变量的主要优点是仅在需要时编译器才为之分配内存。这是因为临时变量仅在程序执行到它们被定义的程序块内时才进入生存期。 12.2.2 全局变量 与局部变量相对应的,在所有函数外部定义的变量,即所有函数的外部变量,则被称为“全局变量”。实际上,整个C程序可以视为一个程序块,而且是其余所有程序块的上层程序块,而全局变量就是在这个程序块中定义的。因此,全局变量在整个C程序中都是有效力了,作用域为从被定义开始直到整个C程序结束。例如: 12.2.2 全局变量 12.2.3 初始化全局变量 在C语言中,编译器对全局变量的初始化处理与其余变量不一样。如果局部变量没有被显式地初始化,编译器不会自动为其清理内存;如果全局变量没有为其显式初始化,编译器则会自动初始化,将其内存空间清除归零。内存空间清零的效果相当于:如果变量为int型,则赋值为0;如果变量为float型,则赋值为0.0;如果为int型数组,则将每一个数组元素赋值为0…… 12.2.4 合理使用全局变量 当程序需要在不同的程序块、不同的函数间传递数值信息时,最简单最有效的方式就是使用作用域可以覆盖整个程序的全局变量。但与此同时,大作用域也是全局变量的一大缺点,会导致全局变量的一些使用隐患。 12.2.4 合理使用全局变量 1.过渡使用全局变量会导致资源浪费 全局变量一旦被定义后,就会在整个程序执行过程中一直占有内存空间。而局部变量则只是在一段程序块中占有内存空间。如果毫无顾忌地把所有变量都定义为全局变量,会导致内存资源严重浪费。因为并非所有变量都需要把生存周期放大到整个程序执行过程,完全可以把它们定义为局部变量,在需要用到的地方才使用,使用结束后便释放内存。 12.2.4 合理使用全局变量 2.不宜对全局变量做过多操作 由于全局变量可以在程序中所有程序块中访问,如果访问该变量的操作过多,那么就会给编程和调试带来很大的难度,因为程序员很难确保过多的操作全在控制范围之内。对全局变量进行过多的操作常常是一些程序Bug的源头。 12.2.4 合理使用全局变量 3.不利于模块化设计 过多地使用全局变量有悖于模块化编程思想。模块化编
文档评论(0)