版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 停车场扩建钢结构隔层施工合同
- 员工反馈与沟通渠道
- 物流运输可靠性规范
- 水库清淤治理施工合同
- 建筑门窗施工合同:教育设施建设
- 户外用品质量奖评定流程
- 团队协作升级计件奖罚新实践
- 旧城改造工程合同进度跟踪
- 农业计量管理准则
- 云云云金融服务期协议
- 2024年四川农信招聘笔试参考题库含答案解析
- 用色彩表达情感课件
- 大学食堂原料物资猪肉采购 投标方案
- 光纤电缆安装指南
- 2023北京海淀区高二上学期期末语文试题及答案
- 河南省郑州市中原区2023-2024学年九年级上学期期中数学试卷(含解析)
- 高标准农田蓄水池施工方案
- 铁塔认证考试题库大全-3动环专业部分
- 药学职业生涯人物访谈
- 羟亚胺的Semipinacol重排反应与改进探究
- 国有集团公司中层及员工履职追责问责处理办法模版
评论
0/150
提交评论