第12章C语言中用户标识符的作用域和存储类_第1页
第12章C语言中用户标识符的作用域和存储类_第2页
第12章C语言中用户标识符的作用域和存储类_第3页
第12章C语言中用户标识符的作用域和存储类_第4页
第12章C语言中用户标识符的作用域和存储类_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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(inta){a=5;}main(){autointa=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>intf(){staticinti=0;ints=1;s+=i;i++;returns;}main(){inti,a=0;for(i=0;i<2;i++)a+=f();printf(“%d”,a);} A)20

B)24 C)25 D)3√

12.3全局变量及其作用域和生存期一、全局变量的作用域和生存器1、全局变量的作用域从变量定义的位置开始,到整个源文件结束为止。2、当函数内有与全局变量名相同的局部变量时,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量。#include<stdio.h>inta=2;voidfun(){print(“%d”,a);}main(){inta=3;printf(“%d”,a);fun();}练习:以下程序的输出结果是_____。#include<stdio.h>inta=3;main(){ints=0;{inta=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>intx,y;/*定义全局变量*/voidfun1();voidfun2();voidfun3();main(){fun1();fun2();fun3();}voidfun1(){x=111;…}/*file2.c文件*/#include<stdio.h>externintx;/*说明全局变量*/voidfun2(){printf(“%d\n”,x);…}voidfun3(){x++;printf(“%d\n”,x);…}四、静态全局变量当用static说明符说明全局变量时,此变量可称作“静态”全局变量。静态全局变量只限于本编译单位使用,不能被其它编译单位所引用。/*file1.c文件*/#include<stdio.h>staticintn;voidfunc();main(){n=5;printf(“file1:%d\n”,n);func();}/*file2.c文件*/#include<stdio.h>externintn;voidfunc(){printf(“file2:%d\n”,n);…}12.4函数的存储分类一、用extern说明函数当定义一个函数时,若在函数返回值的类型前加上说明符extern时,称此函数为“外部”函数。extern说明可以省略,一般的函数都隐含说明为extern。所以,我们之前所定义的函数都属于外部函数。外部函数的特征是:可以被其它编译单位中的函数调用。且函数的返回值为非整型时,应该在调用语句所在函数的说明部分用extern对所用的函数进行函数说明。二、用static说明函数当定义一个函数时,若在函数返回值的类型前加上说明符static时,称此函数为“静态”函数。静态函数的特征是:只限于本编译单位的其它函数调用它,而不允许其它编译单位中的函数对它进行调用。静态函数又可称作“内部”函数。人有了知识,就会具备各种分析能力,明辨是非的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论