- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十二章 用户标识符的作用域和存储类 局部变量、全局变量和存储分类 作用域:变量的有效范围 局部变量:在函数内部或复合语句内部定义的变量 全局变量:在函数外部定义的变量 存储分类:自动类和静态类 局部变量可以是自动类也可以是静态类 全局变量只能是静态类 存储类别说明符: auto(自动)、 register(寄存器)、static(静态)和extern(外部) C程序在内存中的存储映象 动态存储区: 特点:动态分配、动态释放。 用于保存函数调用时的返回地址、自动类别的局部变量等 静态存储区: 特点:所分配的地址在程序运行期间都不释放(值可被保留) 用于存放全局变量及静态类别的局部变量 程序代码区: 局部变量及其作用域和生存期 auto变量: (存放于动态存储区) 当在函数内部、复合语句内定义变量时,默认存储类别为自动类别。 也可显示的用auto说明符指定变量的存储类别为自动类别 特点: 每次进入函数体(或复合语句内部)时分配存储单元、退出时自动释放。 作用域:从定义的位置起,到函数体(或复合语句)结束为止。 特别提醒:当再次进入函数体时,系统将为它另行分配存储单元,因此变量的值不能被保留。 优点:不同函数中可使用同名的变量而不会相互影响 register变量:寄存器变量(属于自动类变量) 与auto变量的区别:建议编译器将变量保留在CPU的寄存器中 优点:不占内存地址,访问效率高 一般用于频繁引用的少数变量 说明: 1、CPU中寄存器数目是有限的,只能说明少量的寄存器变量。当编译系统认为不适合放在寄存器中时,将按自动变量来处理。因此,register只是一种建议,而不是强制性的 2、由于是放在寄存器中的,所以register变量没有地址。不可对它进行求地址运算。 3、register变量的说明应尽可能靠近其使用的地方,用完之后尽快释放,以便提高寄存器的利用效率。 静态存储类的局部变量 static变量 特点: 1、在整个程序运行期间,静态局部变量在内存区中占据着永久性的存储单元。即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来分配的存储单元。也就是说:可以保留该变量中的值。 2、静态局部变量的初值是在编译时赋予的,在程序运行期间不再赋予初值。对未赋初值的静态局部变量系统将自动赋初值0 全局变量及其作用域和生存期 全局变量: 在函数外部定义的变量,它只有静态存储一种类别。对于全局变量,可使用extern和static两种说明符。 全局变量的作用域:从定义的位置开始到整个源文件的结束。 全局变量的生存期:整个程序运行的期间 注意: 全局变量和函数中的局部变量同名,则在函数内部起作用的是局部变量。 特别提醒:除十分必要外,一般不提倡使用全局变量。 原因: 1、全局变量在整个程序运行期间都占用内存空间 2、全局变量必须在函数外部定义,降低了函数的通用性,影响了函数的独立性。 3、全局变量使用不当将会产生难以查找的错误 用extern说明符扩展全局变量的使用范围 一、在同一编译单位中 如果全局变量的定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明。这时其作用域从extern说明处起,延伸到该函数末尾。 注意: 全局变量的定义和全局变量的说明不同:变量的定义只能出现一次,在定义全局变量时,不可使用extern说明符;而对全局变量的说明,则可以多次出现在需要的地方。这时必须用extern进行说明。 2、在不同的编译单位内用extern说明符来扩展全局变量的作用域。 编译单位:每一个可以进行单独编译的源文件称为“编译单位”。 当一个程序由多个编译单位组成,并且在每一个源文件中都需要引用同一个全局变量时,可在其中一个文件中定义所有的全局变量,而在其它用到这些全局变量的文件中用extern对这此变量进行说明。 优点:系统只为每一个全局变量分配一个存储单元。 * *
文档评论(0)