C程序设计08-变量的作用域及存储类别_第1页
C程序设计08-变量的作用域及存储类别_第2页
C程序设计08-变量的作用域及存储类别_第3页
C程序设计08-变量的作用域及存储类别_第4页
C程序设计08-变量的作用域及存储类别_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、第1页,第八章 变量的作用域和存储类别,主要内容,同名变量的辨析,变量的存储类别和生存期,变量作用域和生存期小结,第2页,第一节 变量的作用域,局部变量,1,2,本节主要内容,全局变量,3,3,第3页,变量的作用域:允许使用变量的区域 依照变量作用域的不同,可以把变量分为两种:,第一节 变量的作用域,第4页,局部变量:在大括号内定义的变量 局部变量的作用域: 局部变量只能在定义它的括号内使用, 其作用范围不能向括号外渗透(可以向内层括号中渗透)。 在函数体开头定义的, 在本函数内有效 在复合语句中定义的, 则只在复合语句中有效,8.1.1 局部变量,第5页,8.1.1 局部变量,int mai

2、n() /*指出程序中的错误*/ int a,b; scanf(“%d%d”, ,错误!应移入 复合语句内,移入复合语 句内, 可否?,第6页,说明: 即便是在主函数中定义的变量, 也不能被其它函数使用 形式参数也是局部变量(与函数内定义的相同) 不同函数中定义的变量可以同名, 但表示的不是同一变量, 它们在内存中占用不同的单元,8.1.1 局部变量,第7页,8.1.2 全局变量,全局变量: 在函数外定义的变量, 又叫外部变量 全局变量的作用域:从定义处到源文件结束 如: int x,y; /*定义在函数外*/ int main( ) f1( ) int m,n; /*定义在函数外*/ f2(

3、 ) f3( ) ,第8页,8.1.2 全局变量,全局变量的作用域可以扩展 (1)在本源文件中扩展, 如: int x,y; extern m; /*变量声明,可以不写类型*/ int main( ) f1( ) int m,n; f2( ) f3( ) ,第9页,8.1.2 全局变量,全局变量的作用域可以扩展 (2)扩展到其他源文件, 如:,/源文件2 extern m; int f4( ) float f5( ) void f6( ) ,/源文件1 int x,y; int main( ) f1( ) int m,n; f2( ) f3( ) ,第10页,8.1.2 全局变量,全局变量的作

4、用域可以扩展 (3)如果不想让其他源文件使用,可以在定义时加上static进行限制,/源文件2 extern m; int f3( ) void f4( ) void f5( ) ,/源文件1 static int m; int main( ) void f1( ) int f2( ) ,/源文件3 int m; float f6( ) void f7( ) int f8( ) ,第11页,8.1.2 全局变量,全局变量的作用: 给多个函数提供一个公共场所,便于函数之间交换数据 全局变量的适用场合: 有些情况下, 主调函数需要被调函数提供两个以上的值,如:在若干数据中找出最大值和最小值 而函数

5、只能有一个返回值,第12页,8.1.2 全局变量,void max_min(int x,int y) int i; for(i=x; i=x*y; i+=x) if(i%y=0) min=i; break; max = x*y/min; ,#include int max, min; void max_min(int,int); int main() int a,b; scanf(“%d%d”, ,求两个数的最小公倍数和最大公约数,第13页,8.1.2 全局变量,全局变量的优缺点: 优点:一个函数将值放入全局变量, 其他函数都可以使用, 从而增加了函数间的联系 缺点: 占内存时间长 函数之间互

6、相影响,增加了函数间耦合性 除非必要,一般不用全局变量 问题:全局变量可否作参数?,第14页,第二节 同名变量的辨析,局部变量和全局变量同名时的分辨,int a=1,b=2,c=3,d=4; int main() int a,b; a=4; /*局部变量*/ b=5; /*局部变量*/ c=6; /*全局变量*/ if(ab) int c; c=a; /*c是复合语句级,a是函数级*/ a=b; /* a,b都是函数级*/ b=d; /*b是函数级,d是全局*/ ,第15页,第三节 变量的存储类别和生存期,内存区域的划分,1,2,3,本节主要内容,3,局部变量的种类,3,3,3,全局变量的种类

7、,第16页,第三节 变量的存储类别和生存期,内存区域的划分,1,2,3,本节主要内容,3,局部变量的种类,3,3,3,全局变量的种类,第17页,8.3.1 内存区域的划分,堆区,代码区,非零区 零区,栈区,第18页,第三节 变量的存储类别和生存期,内存区域的划分,1,2,3,本节主要内容,3,局部变量的种类,3,3,3,全局变量的种类,第19页,8.3.2 局部变量的种类,局部变量根据生存期不同,又分为局部自动变量 和局部静态变量 局部自动变量的数据可以存放在内存中,也可以存放在寄存器中,存放在寄存器中的称为寄存器变量,局部变量,寄存器变量 register,局部自动变量 auto,局部静态变

8、量 static,第20页,8.3.2 局部变量的种类,局部自动变量 例: int f(int a,int b) /*局部自动变量*/ auto int c; /*auto可省*/ c=a+b; ,第21页,8.3.2 局部变量的种类,局部自动变量的特点: 动态存储: 需要时才开辟空间, 用完即释放,若再用,需要重新开辟 赋初值次数与开辟空间次数相等: 若变量定义时赋了初值, 则每次开辟空间时都要存入初值 若定义变量时无初值,则其值不确定,第22页,8.3.2 局部变量的种类,void f() int a=1, b; int main() f(); f(); return 0; ,第23页,8

9、.3.2 局部变量的种类,局部静态变量 void f( ) static int n=0; /*局部静态变量*/ n+; printf(“第%d次调用n”,n); ,第24页,8.3.2 局部变量的种类,void f() static int n=0; n+; printf(“第%d次调用n”,n); int main() int i; for(i=1;i=2;i+) f(); return 0; ,0,n,?,i,1,2,1,2,3,第1次调用 第2次调用,屏幕输出:,执行过程:,第25页,8.3.2 局部变量的种类,局部静态变量的特点: 静态存储: 程序开始时开辟空间, 用完不释放,以备后

10、用,整个程序结束时再释放(只开辟一次,也只释放一次) 保留数据: 第一次调用函数时留下的数据,第二次可以继续用 若有初值,只赋一次 若变量定义时赋了初值, 则开辟空间时存入初值,且仅此一次 若定义变量时无初值,则系统自动置0模式 作用范围仅限于定义它的括号内 适用场合:函数调用时存的数据需要保留到下次调用,第26页,8.3.2 局部变量的种类,寄存器变量: void f(int a, int b) register int i; /*寄存器变量*/ 寄存器变量的特点: 变量的值存放在系统分配的寄存器中,可减少变量存取时的时间开销,第27页,8.3.2 局部变量的种类,寄存器变量的适用场合: 对

11、运行速度要求高的程序中 系统对寄存器变量的限制: 只有局部自动变量和形参可定义为寄存器变量 寄存器变量的数目不能太多,若非必要一般不用 微机上,编译器一般将寄存器变量当作自动变量处理 原因:寄存器数目有限,第28页,第三节 变量的存储类别和生存期,局部变量和全局变量,1,2,3,本节主要内容,3,局部变量的种类,3,3,3,全局变量的种类,第29页,8.3.3 全局变量的种类,全局变量根据作用域不同,又分为两种:,全局变量,一般全局变量 extern,static型全局变量 static,存储类型:都是静态存储,程序运行之前开辟空间,程序结束才释放 初值:若不赋初值,其值都为0,第30页,8.

12、3.3 全局变量的种类,一般全局变量(用extern说明或省略) 作用域可在本源文件内扩展: 如: int x,y; int main( ) extern m; f1( ) int m,n; f2( ) ,m原本作用域,m现在作用域,第31页,8.7.3 全局变量的种类,一般全局变量(程序级) 作用域还可扩展到其它源文件:,第32页,8.7.3 全局变量的种类,static型全局变量(有些教材称做静态全局变量) 作用域只能在本源文件内扩展: 如: int main( ) extern m; f1( ) static int m,n; f2( ) ,m的作用域,第33页,8.7.3 全局变量的种类,static型全局变量(文件级) 作用域只能在本源文件内扩展:,extern m,n; int main( ) ,int m, n; void f1() ,static int m, n; void f2() ,源文件3,源文件2,源文件1,第34页,第四节 变量作用域和生存期小结,第35页,习 题,intmain() floatx,y; scanf(“%f,%f”, ,floatmax(floatx, floaty); floatx,y; float m; if(xy) m=x; el

温馨提示

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

评论

0/150

提交评论