C语言中用户标示符的作用域及存储类.pptVIP

C语言中用户标示符的作用域及存储类.ppt

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

局部变量?全局变量和存储分类 用户标识符的作用域 局部变量?全局变量和存储分类 局部变量及其作用域和生存期 auto变量、register变量、静态存储类的局部变量 全局变量及其作用域和生存期 函数的存储分类 用extern说明函数 用static说明函数 例如 float a; 就等价于: auto float a; auto变量的存储单元被分配在内存的动态存储区?每当进入函数体(或复合语句)时,系统自动为auto变量分配存储单元;退出时自动释放这些存储单元另作他用? auto变量的作用域是从定义的位置起,到函数体(或复合语句)结束为止? 例如 void sub ( float a ) { int i; … if ( i 0) { int n; … printf ( "% d\n", n ); } … } 所有自动局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失?这就是自动类局部变量的“生存期”?当再次进入函数体(或复合语句)时,系统将为它们另行分配存储单元,因此变量的值不可能被保留? 若通过定义语句给自动变量赋初值,赋初值的操作是在程序运行过程中进行的,每进入一次函数体(或复合语句),就赋一次初值? #include stdio.h int power ( int , register int ); main () { int s; s=power ( 5,3 ); printf ( "% d\n", s ); } int power ( int x, register int n) { register int p; for ( p =1; n; n--) p =p * x; return p; } 说明 1) CPU中寄存器的数目是有限的,因此只能说明少量的寄存器变量? 2)由于register变量的值是放在寄存器内而不是放在内存中,所以register变量没有地址,也就不能对它进行求地址运算? 3) register变量的说明应尽量靠近其使用的地方,用完之后尽快释放,以便提高寄存器的利用效率?这可以通过把对register变量的说明和使用放在复合语句中来实现? 全局变量可使用extern和static两种说明符? void fun1 ( void); void fun2 ( void ); int sum; /*定义全局变量*/ main () { … sum++; … } void fun1 ( void ) { … sum++; … } int test; /*定义全局变量*/ void fun2 ( void ) { … sum++; test =1; … } 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止? sum是在整个源程序的开始定义的,它的作用域是整个程序? test是在函数fun2前定义的,它的作用域从定义处开始直到程序结束。 全局变量的使用相当于为函数之间的数据传递另外开辟了一条通道? 全局变量的生存期是整个程序的运行期间? 若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系? 例如 #include stdio.h int sum; /*定义全局变量*/ void fun ( void ); main () { sum =10; printf ( "** main(1) **: % d\n", sum); fun (); printf ( "** main(2) **: % d\n", sum); } void fun ( void ) { int sum; /*定义同名局部变量*/ sum =20; printf ( "** fun **: %d\n", sum); } 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止? ** main(1) **:10 ** fun **:20 ** main(2) **:10 即全局变量sum的作用域是除函数fun以外的整个程序;局部变量sum的作用域仅是函数fun内部? 结果 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止? 除十分必要外,一般不提倡使用全局变量,原因主要有以下三个方面: 1)不论是否需要,全局变量在整个程序运行期间都占用内存空间? 2)全局变量必须在函数以外定义,降低了函数的通用性,影响了函数的独立性? 3)使用全局变量容易因疏忽或使用不当而导致全局变量中的值意

文档评论(0)

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

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

1亿VIP精品文档

相关文档