




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 C语言中用户标识符的作用域和存储类对变量的进一步讨论,12.1 局部变量、全局变量和存储分类 12.2 局部变量及其作用域和生存期 12.3 全局变量及其作用域和生存期 12.4 函数的存储分类,按类型,整形变量 实型变量 字符变量,按有效范围 (作用域),局部变量 全局变量,按生存期 (存储类别),auto变量 static变量,局部变量,1。在一个函数内部定义的变量。,#include float f1(int n) int i,j; . char f2(float x,float y) float z; . main() int a,b,c; . ,i,j的有效范围,z的有效范
2、围,a,b,c的有效范围,2。函数的形式参数。,3。在某个复合语句中定义的变量,n的有效范围,x,y的有效范围,#include main() int a,b,c; . int c; . c=a+b; . ,c的有效范围,复合语句中的变量c和函数体中的c互不影响,在符合语句中的变量都有自己的存储单元。,全局变量,#include int p=1,q=5; float f1(int a) int b; . int f2(int a) int b; . main() int m,n; . ,全局变量就是指在函数体之外定义的变量。,全局变量的有效范围是:从定义变量的位置开始到原文件结束。,p,q的有
3、效范围,auto变量,当在函数内部或复合语句内定义变量时,也可以使用auto说明符进行说明。 用auto说明的变量,当该变量退出它的有效范围时,系统将自动释放该变量 所占的存储单元。,例如: #include double add(double a,double b) auto double s; s=a+b; return s; main() double y,p,q; scanf(“%lf%lf”, ,退出该函数时,局部变量a,b和s都自动释放,在这里,我们说明了变量s为auto型,所以也会自动释放。再此,我们也可以把auto省略。,register变量,寄存器变量与auto变量基本上相同
4、,它们之间还是存在一些区别的:用register 说明的变量建议编译程序将变量的值保留在CPU的寄存器中,而不是像一般变量 那样,占内存空间。,例如: #include int power(int,register int); main() int s; s=power(5,3); printf(%dn,s); int power(int x,register int n) register int p; for(p=1;n;n-) p=p*x; return p; ,特点, 使用寄存器变量,程序运行时,访问存储器 内的值要比访问存于内存中的值快得多。 CPU中的寄存器的数目是有限的,因此只能
5、说明 少量的寄存器变量。 register变量无地址。 尽量少用register变量。,static变量,例如: #include float fac(int n) static float f=1; f=f*n; return f; main() int j; for(j=1;j=5;j+) printf(%d!=%.0fn,j,fac(j); ,此条语句是在编译时进行的并赋初值,此条语句程序不会执行它;如果定义局部静态变量时没有赋初值,编译时会自动赋初值。用static说明的变量,在退出整个程序时,才释放内存空间。,1!=1 2!=2 3!=6 4!=24 5!=120,如有以下程序 in
6、t 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 += a+; return t+a+; main() int s=a, i; for( i=0; i3; i+) s+=f(i); printf(%dn, s); 程序运行后的输出结果是 A)26 B)28 C)29 D)24,extern说明符的作用,当在同一个文件中时使用,#include int p; void f1(int n) int s=1; . main() int a,b,c;
7、. ,的有效范围,p,#include void f1(int n) int p=1; . int p; main() int a,b,c; . ,的有效范围,p,局部变量p 的有效范围,#include void f1(int n) extern int p=1; . int p; main() int a,b,c; . ,全局变量 的有效范围,p,extern说明符的作用,不同文件中的使用,f1.c原程序文件,f2.c原程序文件,#include int x,y; /*定义全局变量*/ void fun1(); void fun2(); void fun3(); main() fun1()
8、; fun2(); fun3(); void fun1() x=111; . ,#include extern int x; void fun2() printf(%dn,x); . void fun3() x+; printf(%dn,x); . ,在此用extern说明x为全局变量,则意味着在此文件中将会引用f1.c文件中原来变量x中的值。,111 112,静态全局变量,不同文件中的使用,f1.c原程序文件,f2.c原程序文件,#include static int n; void func(); main() n=5; printf(file1:%dn,n); func(); ,#include extern int n; void fun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届广西钦州市高新区物理高一第二学期期末考试模拟试题含解析
- 冰雪奇缘课件小学生
- 云南省玉溪市通海县第二中学2025届物理高二第二学期期末监测试题含解析
- 冬季疾病预防知识课件
- 广东省执信中学2025届高二物理第二学期期末统考模拟试题含解析
- 2025届河南省名校大联考高一物理第二学期期末经典模拟试题含解析
- 二零二五版标准木托盘租赁及供应链金融服务合同
- 二零二五年企业内部沟通协调劳动合同
- 二零二五年度重型货物搬运工劳务合同
- 二零二五年度室内外装饰安装工程施工安全协议
- 2025至2030中国养老地产行业市场发展深度分析及前景趋势与行业项目调研及市场前景预测评估报告
- 2025年广东高考地理真题(原卷版)
- 小小科学家《物理》模拟试卷
- 胃痛护理查房
- 监控岗工作培训
- 税务机关出口退税课件
- 中国保安服务行业发展分析与发展趋势预测研究报告2025-2028版
- QGDW10384-2023输电线路钢管塔加工技术规程
- 2025贵州省水利投资(集团)有限责任公司招聘84人笔试备考题库参考答案详解
- 渣土外运施工方案(3篇)
- 超市主管考试试题及答案
评论
0/150
提交评论