c语言 变量的作用域和存储类.pptVIP

  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文档。上传文档
查看更多
c语言 变量的作用域和存储类

第十二章 变量的作用域和存储类 第十二章 变量的作用域和存储类 在C语言中,变量必须先定义,后使用。但定义语句应该放在什么位置?在程序中,一个定义了的变量是否随处可用?这些问题牵涉到变量的作用域。经过赋值的变量是否在程序运行期间总能保存其值?这又牵涉到变量的生存期。本章将对这些问题进行详细的讨论。 12.1 变量的作用域和存储类别 12.1.1 变量的作用域 变量的作用域即变量在程序中的有效范围。即在程序的什么范围内变量可以被识别和使用。根据作用域的大小,变量可分为: 局部变量:在函数内部或复合语句内部定义的变量(函数的形参也属于局部变量)。 全局变量:在函数外部定义的变量。 #includestdio.h int a , b ; a = 2 ; b = 3 ; main ( ) { int s ; s = fun ( a , b ) ; printf ( “s=%d\n” , s ) ; } int fun ( int x , int y ) { int z ; z = x + y ; return z ; } 12.1 变量的作用域和存储类别 12.1.2 变量的存储类别 变量的生存期通过存储类别来设置,存储类别规定了变量在内存中的存储方法。存储类别分为两类: 自动类:使用auto(自动)、register(寄存器)说明符。全局变量不能是自动类。 静态类:使用static(静态)说明符。局部变量和全局变量皆可为静态类。 变量的存储类别 动态存储 根据需要临时分配存储空间,离开即释放 静态存储 在程序运行期间分配固定的存储空间不释放 存储类别说明符通常与类型名一起出现,它们可以放在类型名的左边,也可以放在类型名的右边。 例如: auto int a , b ; 也可写成: int auto a , b ; 12.2 局部变量的作用域和生存期 12.2.1 auto 变量 当在函数内部或复合语句内部定义变量时,如果没有指定存储类,或使用了auto说明符,系统就认为所定义的变量具有自动类别。 例如: int a ; 等价于: auto int a ; 自动类局部变量的作用域是从定义的位置起,到函数体(或复合语句)结束为止。 void fun ( int a ) /* 形参的缺省类别是auto */ { int i ; /*形参a和变量i作用域是整个fun函数*/ …… if ( i 0 ) { int n ; /*变量n的作用域仅限于if子句内*/ …… printf (“%d\n” , n ) ; } …… } auto变量示例 说明: 局部变量的定义必须放在所在函数体(或复合语句)中全部可执行语句之前 所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在函数体(或复合语句)时消失,这就是自动类局部变量的“生存期”。当再次进入函数体(或复合语句)时,系统将为它们另行分配存储单元。因此变量的值不可能被保留。 使用局部变量的优点: 可以在各函数之间造成信息隔离,不同函数中使用了同名的变量也不会相互影响,从而可避免因不慎赋值所导致的错误影响到其他函数。 12.2 局部变量的作用域和生存期 12.2.2 静态存储类的局部变量 当在函数体(或复合语句)内部用static来说明一个变量时,可以称该变量为静态局部变量。 例如: static int a ; 静态局部变量的作用域与auto类变量一样,但有两点本质区别: 在整个程序运行期间,静态局部变量在内存中占据着永久性的存储单元,其生存期贯穿于整个程序运行期间。 静态局部变量的初值是在编译时赋予的,不是在程序执行期间赋予。对未赋初值的静态局部变量,C编译程序自动给它赋初值0。 #includestdio.h main( ) { int a = 2 , i ; for ( i = 0 ; i 3 ; i++ ) printf ( “ %d ” , fun ( a ) ) ; } int fun ( int a ) { int b = 0 ; static int c = 3 ; b = b + 1 ; c = c + 1 ; return a+b+c ; } #includestdio.h main( ) { int i ; for ( i = 1 ; i = 5 ; i++ ) pri

文档评论(0)

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

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

1亿VIP精品文档

相关文档