局部变量和全局变量.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
局部变量和全局变量.doc

8.8 局部变量和全局变量 8.8.1 局部变量 局部变量:函数或分程序内定义的变量,只在本函数或本分程序内有效。 说明:(1)我们使用的变量一般是局部变量,main函数中的变量也是局部变量。 (2)不同函数可以使用相同的变量名,但他们是互不关联的两个变量 (3)形参是局部变量 (4)复合语句中的变量局部于本复合语句(分程序) 8.8.2 全局变量 全局变量:在函数(所有函数)之外定义的变量,作用于其后的所有函数,叫做全局变量。 作用域(有效范围):定义变量的位置到本文件结束。 局部变量与全局变量尤如地方法规与全国法规。 说明 (1)优点:增加了函数的联系渠道,带回多于一个返回值。部分的节省了内存和执行时间。 (2)缺点:始终占用内存。降低了函数的独立性。降低了函数的可靠性和通用性。 模块化程序设计有一个原则:模块的“内聚性”强,与其他模块的“耦合性”小。 内聚性即模块内部的内在完整性,独立性,功能的单一性,封闭性。 耦合性:模块之间的互相影响,函数与数据的相关性。耦合性小,不确定因素就少。 习惯上我们把函数做成“黑箱”,只关心入口(形参和实参结合)和出口参数(函数值)及其函数功能,不关心模块(函数)内部的细节。这样,程序的可移植性好,可读性好。 全局变量的值不好控制,过多的使用全局变量会极大的降低程序的可读性 因此我们应尽量不使用全局变量 全局变量举例:使用软件的单位名,年,月,日 提倡:全局变量的第一个字母为大写。 (3)外部变量的屏蔽 li8_16.c 程序分析的方法 8.9 变量的存储类别 8.9.1 动态存储方式与静态存储方式 作用域:空间 生存期:时间 存储区分类:程序区、静态存储区、动态存储区 全局变量全部存放在静态存储区,程序开始执行时分配存储区,程序运行期间占据固定的存储空间,程序执行完毕后释放掉。 动态存储方式:在程序运行期间根据需要进行动态的分配存储空间,函数调用开始时动态分配存储区,函数结束时释放这些空间。形参、自动变量(无static声明的局部变量)存放在动态存储区、函数调用时的现场保护和返回地址等也存放在动态存储区(堆栈)。 同一函数两次调用时局部变量占据的存储空间地址可能不同。被调用函数局部变量的生存期并不等于整个程序的生存期。 变量和函数有两个属性:数据类型、数据的存储类别。 存储类别:数据在内存中存储的方法:静态存储类、动态存储类。根据存储类别决定变量的作用域和生存期。8.9.2 auto变量 auto变量:无static声明的局部变量。 用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别)。是动态存储方式。大多数变量是自动变量。 8.9.3 用static声明局部变量 用static声明的局部变量是静态局部变量。 函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。 li8_17.c 说明: (1)静态局部变量属于静态存储类别,在静态存储区分配内存单元,在整个程序运行期间都不释放。 使用静态局部变量的值 (2)静态局部变量的初值:编译时赋初值,只赋初值一次,调用时已经有初值,调用时是不赋初值的。 (3)若定义时未赋初值,则初始化为0或\0(全0) (4)静态局部变量中“局部”的含义:只有本函数可以使用,其他函数无法使用该变量。 用途: (1)需要保留函数上一次调用的某些结果时,这些值可定义为静态变量。 li8_18.c 阶乘 (2)某些变量初始化后只被引用而不改变其值时,可定义为静态变量。 (3)静态变量多占内存,降低可读性,没有必要时不要使用静态变量。 常见用法:统计某一个函数被调用的次数,或者与调用次数相关的其他统计工作。 函数调试的方法: 1 监控函数的参数值 2 加断点 8.9.4 register 变量 省去了内存与CPU的数据交换过程,直接使用CPU的内部寄存器。 li8_19.c 说明:(1)只有局部变量和形参可以作为register变量,全局变量不行。 (2)80x86系列CPU最多可使用的register变量数目有限。int型可使用8个通用寄存器。 实际上有些系统并不把register变量存放在寄存器中,而优化的编译系统则可以自动识别使用频繁的变量而把他们放在寄存器中,因此用register声明变量实际上是不必要的。我们只需要知道有这么一种变量即可。 (3)静态变量不能定义为register。 8.9.5 用extern声明外部变量 外部变量即全局变量 可以用extern声明来改变全局变量的作用域 1. 在一个文件内声明外部变量 一般将外部变量声明放在引用它的函数之前,也可以将外部变量定义放在引用它的函数之前。 li8_20.c 外部变量声明时可以不指定类型。 2. 在多文件的程序中声明

文档评论(0)

docinppt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档