第12章的 C语言中用户标识符的作用域和存储类.ppt

第12章的 C语言中用户标识符的作用域和存储类.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章的 C语言中用户标识符的作用域和存储类

C语言程序设计 12.1 局部变量、全局变量和存储分类 所谓变量的“作用域”就是指变量在程序中的某一部分有效,能被C编译和连接程序所识别。 变量分类: 1、按作用域分: 1)局部变量:在函数内部或复合语句定义的变量。函数的形参也属于局部变量,也称内部变量。 2)全局变量:在函数外部定义的变量,也称外部变量。 第12章 C语言中用户标识符的作用域和存储类 2、按存储类别分: 1)自动类: 2)静态类: 局部变量既可说明为自动变量也可说明为静态类。 全局变量只能是静态类。 3、四个与两种存储类别有关的说明符: 1)auto(自动) 2)register(寄存器) 3)static(静态类) 4)extern(外部) 12.2 局部变量及其作用域和生存期 一、auto变量 1、当在函数内部或复合语句内定义变量时,如果没有指定存储类,或使用了auto说明符,系统就认为所定义的变量具有自动类别。 2、auto变量的存储单元被分配在内存的动态存储区。每当进入函数体(或复合语句)时,系统自动为auto变量分配存储单元;退出时自动释放这些存储单元另作它用。 fun(int a) { a=5; } main() { auto int a=8; fun(a); printf(“%d”,a); } 二、register变量 1、寄存器变量也是自动类变量。它与auto变量的区别在于:用register说明变量是建议编译程序将变量的值保留在CPU的寄存器中,而不是象一般变量那样,占内存单元。 2、CPU中寄存器的数目是有限的,因此只能说明少量的寄存器变量。 3、由于register变量的值是放在寄存器内而不是放在内存中,所以register变量没有地址,也就不能对它进行求地址运算。 三、静态存储类的局部变量 当在函数体(或复合语句)内部,用static来说明一个变量时,称该变量为静态局部变量。静态局部变量的作用域与auto、register类的变量一样,但它与前者有两点本质上的区别: 1、在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元。 2、静态局部变量的初值是编译时赋予的,在程序执行期间不再赋予初值。对未赋初值的静态局部变量,C编译程序自动给它赋初值0。 练习:以下程序的输出结果是_____。 #include stdio.h int f() { static int i=0; int s=1; s+=i;i++; return s; } main() { int i,a=0; for(i=0;i2;i++) a+=f(); printf(“%d”,a); } A)20 B)24 C)25 D)3 √ 12.3 全局变量及其作用域和生存期 一、全局变量的作用域和生存器 1、全局变量的作用域从变量定义的位置开始,到整个源文件结束为止。 2、当函数内有与全局变量名相同的局部变量时,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量。 #include stdio.h int a=2; void fun() {print(“%d”,a);} main() { int a=3; printf(“%d”,a); fun(); } 练习:以下程序的输出结果是_____。 #include stdio.h int a=3; main() { int s=0; { int a=5;s+=a++; } s+=a++; printf(“%d”,s); } A)7 B)8 C)10 D)11 √ 二、在同一编译单位内用extern说明符扩展全局变量的作用域 全局变量的说明与全局变量的定义不同:变量的定义只能出现一次,在定义全局变量时,不可使用extern说明符;而对全局变量的说明,则可以出现在需要的地方,这时必须用extern说明符。 三、在不同编译单位内用extern说明符扩展全局变量的作用域 /*file1.c文件*/ #include stdio.h int x,y; /*定义全局变量*/ void fun1(); void fun2(); void fun3(); main

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档