C语言教程同步课件10讲(第7章)

上传人:我*** 文档编号:136641061 上传时间:2020-06-30 格式:PPT 页数:32 大小:219KB
返回 下载 相关 举报
C语言教程同步课件10讲(第7章)_第1页
第1页 / 共32页
C语言教程同步课件10讲(第7章)_第2页
第2页 / 共32页
C语言教程同步课件10讲(第7章)_第3页
第3页 / 共32页
C语言教程同步课件10讲(第7章)_第4页
第4页 / 共32页
C语言教程同步课件10讲(第7章)_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《C语言教程同步课件10讲(第7章)》由会员分享,可在线阅读,更多相关《C语言教程同步课件10讲(第7章)(32页珍藏版)》请在金锄头文库上搜索。

1、第十讲 作用范围和存储类别,2,第十讲 作用范围和存储类别,作用范围 存储类别 包含多个源文件的程序,C语言程序设计,3,简介,变量定义的完整格式: 数据类型 占据存储空间的大小 取值范围 存储类别 在内存中持续的时间(生存期) 在硬件中存放的位置 其它属性 作用范围 可以被引用的程序部分(可见性),作用范围和存储类别,4,标识符的作用域,标识符的作用域是指一个标识符,包括变量名、函数名等,在程序中可以被使用的范围。(在这个范围内引用该标识符是合法的,而在这个范围之外,该标识符是不能被引用的) 在C语言中可以在函数内部、函数外部以及函数的参数中定义变量,定义的位置不同,变量的作用域也不同。变量

2、的作用域也称为可见性,变量的声明方式不同,其作用域也不同。 C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。,作用范围和存储类别,5,局部变量,在一个函数内部定义的变量被称作局部变量(形式参数也是局部变量),这种变量的作用域是在本函数范围内,即从变量定义的位置开始,到函数体结束。通俗一点说,局部变量只能在定义它的函数内部使用,而不能在其它函数内使用这个变量。,作用范围和存储类别,6,局部变量,说明: 1、main函数也是一个函数,它内部定义的变量也只能在main函数内部使用,不能在其它函数中使用。同样,主函数中也不能使用其他函数中定义的变量。 2、不同的函数中可以使用同名的变量,

3、这些局部变量代表不同的对象,分配不同的存储单元,不会互相干影响。 3、形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。 4、在复合语句内部也可以定义变量,这些变量的作用域只在本复合语句中。,作用范围和存储类别,例,int fun_a(int a) int b,c; . int fun_b(int x) int y,z; main() int m,n; ,a,b,c作用域在fun_a内,同样,x,y,z作用域在fun_b内,m,n作用域在main内,main() int s,a; . int b; s=a+b; . . ,b的作用域在复合语句内,s,a的作用域在main内,8

4、,例,作用范围和存储类别,10-1.c #include fun() int n=6; printf(n in fun:%dn,n); void main() int n=3; fun(); printf(n in main:%dn,n); ,10-2.c #include void main() int i=2,j=3,k; k=i+j; int k=8; if(i=3) printf(%dn,k); printf(%dn%dn,i,k); ,9,全局变量,在函数外定义的变量称为全局变量,也称为外部变量。全局变量的作用域是从定义变量的位置开始到本源文件结束。这样全局变量可以让很多函数都使用它

5、。全局变量一经定义,编译系统会为其分配固定的内存单元,在程序运行时始终都占用固定内存单元。,作用范围和存储类别,10,全局变量,说明: 1、对于局部变量的定义和说明,可以不加区分。而对于全局变量则不然,全局变量的定义和全局变量的说明并不是一回事。全局变量定义必须在所有的函数之外,且只能定义一次。当需要在全局变量定义位置之前引用它,应该使用extern对该变量进行声明,即可在同一文件内部扩展全局变量的作用域。全局变量声明的格式为:extern 类型说明符 变量名; 2、全局变量的初始化只能有一次,是在对全局变量进行定义的时候。 3、全局变量的作用是使得函数间多了一种传递信息的方式。如果在一个程序

6、中各个函数都要对同一个信息进行处理,就可以将这个信息定义成全局变量。另外,采用这种方式,可以从某个函数内部得到多个计算值。(注,使用全局变量会使函数的独立性降低,因此在不必要时尽量不要使用全局变量) 4、在同一个源文件中,如果局部变量和全局变量重名,则在局部变量的作用域内,全局变量不起作用。,作用范围和存储类别,例,int a,b; void fun1() . float x,y; int fun2() . main() .,全局变量a,b作用域,全局变量x,y作用域,10-3.c #include int X=1; printx(); void main() printf(X in main

7、:%dn,X); printx(); printf(X in main:%dn,X); printx() int X=2; printf(X in printx:%dn,X); ,变量的存储类别,求15的阶乘,并将它们依次输出。10-4.c #include void fac(int n) static int f=1; f=f*n; printf(%d!=%dn,n,f); void main() int i; for(i=1;i=5;i+) fac(i); ,为使函数中的局部变量f在函数调用结束后仍能保留,在下一次调用时继续使用,实现方法是将变量f的存储类别定义为静态的。,变量的存储类别,

8、由于程序在执行过程中,程序和数据在内存中存放的区域是有一定规定的。供用户使用的存储空间大致分为三个不同的部分: 1)程序区:存放程序的可执行代码模块。 2)静态存储区:存放所有的全局变量以及标明为静态类的局部变量部分. 3)运行栈区:存放的数据又分为以下几种。 函数调用时,按序动态存放主调函数执行过程中的现场。此类数据存放也称为现场保护。 所有未标明为静态类的局部变量。 函数的形式参数。 存放在运行栈区的数据均采用动态存储分配方法。,变量的存储方式,分为: 静态存储 在变量定义时就分配存储单元并一直保持不变,直至整个程序结束。 动态存储 是在程序执行过程中,使用它时才分配存储单元,使用完毕立即

9、释放。,15,变量的存储类别,四种存储类别说明符 auto register extern static 两种存储时期 动态存储时期 auto register 静态存储时期 extern static,作用范围和存储类别,16,动态存储类别,自动存储 程序执行到变量所在的程序块内时创建它,退出时销毁。 不会被自动初始化。 auto(自动变量):局部变量的缺省类别。 程序块中声明的变量,函数的参数。 register(寄存器变量):建议编译器把变量放进高速的寄存器。 只适用于自动变量。,作用范围和存储类别,auto int a, b;,register int count = 1;,等价于,i

10、nt a,b;,17,静态存储类别,静态存储 程序开始执行时创建,在程序执行期间,变量一直存在。 自动被初始化,缺省初值:0 或 0。 static(静态变量):可以用于在程序块中定义的变量。 退出程序块后依然存在,并保留值。 但不改变其作用范围,即只能在所在的程序块内被使用。 由于所有全局变量都是静态类型的,C语言规定,static通常在全局变量的定义中可以省去不写。 静态变量有两种:静态全局变量和静态局部变量。,作用范围和存储类别,static int a, b;,静态存储类别,extern(外部变量):用来声明在“外部”定义的全局变量。 仅用于声明变量。 只有定义为extern类型的外部

11、变量才能供其他文件使用。外部变量的定义是在所有函数体之外,用extern或默认存储类别说明,定义时可以给它赋初值,而且只能赋初值一次。 外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从它的作用域提出的,外部变量是从它的存储方式提出的,表示了它的生存期。,extern int total;,19,案例分析:存储类别,存储类别 读下面的程序,写出结果。(10-5.c),作用范围和存储类别,void try(int a) auto int b=10; static int c=10; b+; c+; printf(a=%dtb=%dtc=%dn, a, b, c); void ma

12、in() int i; for (i=1;ib?a:b); ,A,B,10-8.c,10-9.c,29,包含多个源文件的程序,包含多个源文件的程序 static 限制全局变量只能被同一文件内的函数访问。 限制函数只能被同一文件内的函数调用。,作用范围和存储类别,static int myGlobal; static void myFunc() ,30,编译包含多个源文件的程序,编译包含多个源文件的程序 每个源文件必须被编译,然后链接成一个可执行文件。 如果有一个文件作了改动,则必须重新编译所有相关的文件。 一般会提供 make 工具用来管理和编译多源文件的程序。 创建 makefile 文件,

13、记录编译规则。 自动查找必须编译的源文件。 可以创建工程(project)文件来管理多源文件的程序。,作用范围和存储类别,31,小结,用于存储程序数据的内存可用存储时期和作用范围来表征。 存储时期可以是静态的或自动的。 如果是静态的,变量所用内存在程序开始执行时被分配,并在程序执行时一直存在。 如果是自动的,变量所用内存在程序执行到该变量定义所在的代码块时开始分配,在退出代码块时释放。 作用范围决定了哪一部分程序可以访问某个数据。 C语言程序可以包含多个源文件,在编译时,逐一编译各文件,然后通过链接器链接所有的目标代码构成可执行文件。,作用范围和存储类别,综合练习,10-10.c func (int a,int b) static int m=0,i=2; i=i+m+1; m=i+a+b; return (m); main ( ) int k=4,m=1,p1,p2; p1=func(k,m) ; p2=func(k,m) ; printf(%d,%dn,p1,p2) ; ,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号