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

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

  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文档。上传文档
查看更多
第12章 C语言中用户标识符的作用域和存储类 对变量的进一步讨论 12.1 局部变量、全局变量和存储分类 12.2 局部变量及其作用域和生存期 12.3 全局变量及其作用域和生存期 12.4 函数的存储分类 局部变量 全局变量 auto变量 register变量 static变量 extern说明符的作用 extern说明符的作用 静态全局变量 * 按类型 整形变量 实型变量 字符变量 按有效范围 局部变量 全局变量 按生存期 auto变量 static变量 1。在一个函数内部定义的变量。 #include stdio.h float f1(int n) {int i,j; .......... } char f2(float x,float y) {float z; .......... } main() {int a,b,c; .......... } i,j的有效范围 z的有效范围 a,b,c的有效范围 2。函数的形式参数。 3。在某个复合语句中定义的变量 n的有效范围 x,y的有效范围 #include stdio.h main() {int a,b,c; .......... {int c; ......... c=a+b; ......... } } c的有效范围 复合语句中的变量c和函数体中的c互不影响,在符合语句中的变量都有自己的存储单元。 #include stdio.h int p=1,q=5; float f1(int a) {int b; ....... } int f2(int a) {int b; ....... } main() {int m,n; .......... } 全局变量就是指在函数体之外定义的变量。 全局变量的有效范围是:从定义变量的位置开始到原文件结束。 p,q的有效范围 当在函数内部或复合语句内定义变量时,也可以使用auto说明符进行说明。 用auto说明的变量,当该变量退出它的有效范围时,系统将自动释放该变量 所占的存储单元。 例如: #include stdio.h double add(double a,double b) {auto double s; s=a+b; return s; } main() {double y,p,q; scanf(“%lf%lf”,p,q); y=add(p,q); printf(“%f”,y); } 退出该函数时,局部变量a,b和s都自动释放,在这里,我们说明了变量s为auto型,所以也会自动释放。再此,我们也可以把auto省略。 寄存器变量与auto变量基本上相同,它们之间还是存在一些区别的:用register 说明的变量建议编译程序将变量的值保留在CPU的寄存器中,而不是像一般变量 那样,占内存空间。 例如: #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; } 特点 ★ 使用寄存器变量,程序运行时,访问存储器 内的值要比访问存于内存中的值快得多。 ★ CPU中的寄存器的数目是有限的,因此只能说明 少量的寄存器变量。 ★ register变量无地址。 ★ 尽量少用register变量。 例如: #include stdio.h float fac(int n) {static float f=1; f=f*n; return f; } main() {int j; for(j=1;j=5;j++) printf(%d!=%.0f\n,j,fac(j)); } 此条语句是在编译时进行的并赋初值,此条语句程序不会执行它;如果定义局部静态变量时没有赋初值,编译时会自动赋初值。用static说明的变量,在退出整个程序时,才释放内存空间。 1!=1 2!=2 3!=6 4!=24 5!=120 如有以下程序  int a=2;  int f(int n)  { static int a=3;?  int t=0;  if(n%2){ static int a=4; t += a++; }  else { static int a=5; t +=

文档评论(0)

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

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档