C语言学习第八章(中文版)课件

上传人:我*** 文档编号:147853115 上传时间:2020-10-14 格式:PPT 页数:30 大小:459KB
返回 下载 相关 举报
C语言学习第八章(中文版)课件_第1页
第1页 / 共30页
C语言学习第八章(中文版)课件_第2页
第2页 / 共30页
C语言学习第八章(中文版)课件_第3页
第3页 / 共30页
C语言学习第八章(中文版)课件_第4页
第4页 / 共30页
C语言学习第八章(中文版)课件_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C语言学习第八章(中文版)课件》由会员分享,可在线阅读,更多相关《C语言学习第八章(中文版)课件(30页珍藏版)》请在金锄头文库上搜索。

1、,变量的作用域与变量的存储类别,8.8 局部变量和全局变量8.8.1 局部变量,内部变量: 在一个函数内部定义的变量称内部变量。它只在本函数范围内有效,即:只有在本函数内才能使用这些变量,故称为“局部变量” 。 float f1( int a) /* 函数f1 */ int b,c; /* a、b、c有效 */ char f2(int x,int y) /* 函数f2 */ int i,j; /* x、y、i、j有效 */ void main( ) /* 主函数 */ int m,n; /* m、n有效 */ ,8.8 局部变量和全局变量8.8.1 局部变量,内部变量: 主函数中定义的变量只在

2、主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。 形式参数也是局部变量。 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。,8.8 局部变量和全局变量8.8.1 局部变量,内部变量: void main ( ) int a,b; int c; c=a+b; c在此范围内有效 a,b在此范围内也有效 复合语句也称为“分程序”或“程序块”。,8.8 局部变量和全局变量8.8.2 全局变量,外部变量: 函数之外定义的变

3、量称为外部变量。外部变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。所以也称全程变量。,8.8 局部变量和全局变量8.8.2 全局变量,外部变量: int p=1,q=5; /* 外部变量 */ float f1(int a) /* 定义函数f1 */ int b,c; char c1,c2; /* 外部变量*/ char f2 (int x, int y) /* 定义函数f2 */ int i,j; 全局变量p,q的作用范围 全局变量c1,c2的作用范围 void main ( ) /* 主函数 */ int m,n; ,8.8 局部变量和全局变量8.8.

4、2 全局变量,例8.15 有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。 #include float Max=0,Min=0; /* 全局变量 */ void main( ) float average(float array ,int n); float ave,score10; int i; for ( i=0; i10; i+ ) scanf(“%f”, ,8.8 局部变量和全局变量8.8.2 全局变量,float average(float array , int n) /*定义函数,形参为数组*/ int i; float aver,sum=array

5、0; Max=Min=array0; for ( i=1; iMax ) Max=arrayi; else if (arrayiMin) Min=arrayi; sum=sum+arrayi; aver=sum/n; return(aver); ,8.8 局部变量和全局变量8.8.2 全局变量,8.8 局部变量和全局变量8.8.2 全局变量,建议:一般不使用全局变量,因为: 全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。 使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。 降低函数的通用性。因为函数

6、在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把程序中的函数做成一个封闭体,除了可以通过“实参形参”的渠道与外界发生联系外,没有其他渠道。,8.8 局部变量和全局变量8.8.2 全局变量,例8.16 外部变量与局部变量同名。 #include int a=3,b=5; /*a,b为外部变量*/ a,b作用范围 void main ( ) int a=8; /*a为局部变量*/ 局部变量a作用范围 printf(“%d”,max(a,b); 全局变量b

7、的作用范围 max(int a, int b) /*a,b为局部变量*/ int c; c=ab?ab; 形参a、b作用范围 return (c); ,8.9 变量的存储类别8.9.1 动态存储方式与静态存储方式,从变量的作用域(即从空间)角度来分,可分为: 全局变量 局部变量 从变量值存在的时间角度来分,可分为: 静态存储方式:指在程序运行期间由系统分配固定的存储空间的方式。 动态存储方式:则是在程序运行期间根据需要进行动态的分配存储空间的方式。该存储空间可分为: 程序区 静态存储区 动态存储区,8.9 变量的存储类别8.9.1 动态存储方式与静态存储方式,变量和函数有两个属性: 数据类型

8、数据的存储类别:数据在内存中存储的方式。 存储方式分为两大类: 静态存储类 动态存储类 自动的(auto) 静态的(static) 寄存器的(register) 外部的(extern) 根据变量的存储类别,可以知道变量的作用域和生存期。,8.9 变量的存储类别8.9.2 auto变量,自动变量auto: 专门声明为static存储类别的局部变量都是动态分配存储空间,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。 自动变量用关键字auto作存储类别的声明。 函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类。

9、例如:int f(int a) /*定义f函数,a为形参*/ auto int b,c=3; /*定义b、c为自动变量*/ ,8.9 变量的存储类别8.9.3 用static声明局部变量,静态变量static : 当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量。 用关键字static进行声明。,8.9 变量的存储类别8.9.3 用static声明局部变量,例8.17 考察静态局部变量的值。 #include void main( ) int f(int); int a=2,i; for ( i=0; i3; i+) printf(“%d”,f(a); int

10、f(int a) auto int b=0; static c=3; b=b+1; c=c+1; return (a+b+c); ,8.9 变量的存储类别8.9.3 用static声明局部变量,对静态局部变量的说明: 静态局部变量属静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。 对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。 如在定义局部变量时不赋初值的话,则对静态局部变量来

11、说,编译时自动赋初值(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。 虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。,8.9 变量的存储类别8.9.3 用static声明局部变量,例8.18 输出1到5的阶乘值。 #include void main( ) int fac(int n); int i; for (i=1; i=5; i+) printf(“%d!=%dn”, i, fac(i); int fac(int n) static int f=1; f=f*n; return(f); ,8.9 变量的存储类别8.9.4

12、register变量,寄存器变量register : 变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。,8.9 变量的存储类别8.9.4 register变量,寄存器变量register的使用: 如果有一些变量使用频繁,则为存取变量的值要花费不少时间。 为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。 由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。 这种变量叫做寄存器变量,用关

13、键字register作声明。,8.9 变量的存储类别8.9.5 用extern声明外部变量,外部变量: 外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。 在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。 用extern来声明外部变量,以扩展外部变量的作用城。 用extern声明外部变量: 在一个文件内声明外部变量 在多文件的程序中声明外部变量,8.9 变量的存储类别8.9.5 用extern声明外部变量,例8.20 用extern声明外部变量,扩展它在程序文件中的作用域。 #include void main( )

14、int max(int,int); /*外部变量声明*/ extern A,B; printf(%dn,max(A,B); int A=13,B=-8; /*定义外部变量*/ int max(int x,int y) /*定义max函数*/ int z; z=xy?x:y; return(z); ,8.9 变量的存储类别8.9.5 用extern声明外部变量,例8.21 用extern将外部变量的作用域扩展到其他文件。本程序的作用是给定b的值,输入a和m,求ab和am的值。文件file1.c中的内容为: #include int A; /*定义外部变量*/ void main( ) int p

15、ower(int); /*函数声明*/ int b=3,c,d,m; printf(“enter the number a and its power m:n”); scanf(“%d,%d”, ,8.9 变量的存储类别8.9.5 用extern声明外部变量,例8.21 用extern将外部变量的作用域扩展到其他文件。本程序的作用是给定b的值,输入a和m,求ab和am的值。,文件file1.c中的内容为: #include int A; /*定义外部变量*/ void main( ) int power(int); /*函数声明*/ int b=3,c,d,m; printf(“enter the number a and its power m:n”); scanf(“%d,%d”, ,8.9 变量的存储类别8.9.6 用static声明外部变量,用static声明外部变量: 在程序设计中,某些外部变量只限于被本文件引用,而不能被其他文件引用。 这时可以在定义外部变量时加一个staitic声明。 例如: file1.c file2.c static int A; extern int A; void main( ) void fun(int n) A=A*n; ,8.9 变量的存储类别8.9.7 关于变量的声明和定义,定义性声明: 需要建立存储

展开阅读全文
相关资源
相关搜索

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

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