收藏 分享(赏)

第3讲 变量作用域、存储类别,内部、外部函数.ppt

上传人:kpmy5893 文档编号:9658492 上传时间:2019-08-21 格式:PPT 页数:21 大小:297.50KB
下载 相关 举报
第3讲 变量作用域、存储类别,内部、外部函数.ppt_第1页
第1页 / 共21页
第3讲 变量作用域、存储类别,内部、外部函数.ppt_第2页
第2页 / 共21页
第3讲 变量作用域、存储类别,内部、外部函数.ppt_第3页
第3页 / 共21页
第3讲 变量作用域、存储类别,内部、外部函数.ppt_第4页
第4页 / 共21页
第3讲 变量作用域、存储类别,内部、外部函数.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、本讲内容:(1)局部变量和全局变量(2)变量的存储类别(3)内部函数与外部函数,第3讲 变量作用域、存储类别,内部、外部函数,一、局部变量: 指在一个函数内部(或复合语句)定义的变量, 它只在本函数的范围内有效, 在此函数之外不能使用这些变量。,说明: 局部变量只在本函数范围内有效,main函数中定义的变量也是局部变量。,5.6 局部变量和全局变量,2. 不同函数中可以使用相同名字的变量,它们互不干扰,3. 形式参数也是局部变量,5.6 局部变量和全局变量,例 3-1 void aaa(int a); void main( ) int c=2;printf(“%dn“, c);int a=12

2、;aaa(a);printf(“%dn“, c); void aaa(int a) int c;c = a+1; printf(“%dn“,c); ,两个函数的变量a,c虽然同名,但是不同的变量,结果:2132,main函数中的局部变量:a和c,形参a为的局部变量,c为的局部变量,作用域分别为?,4. 可在一个复合语句中定义变量, 它们只在复合语句内有效。 5. 如果函数中的局部变量和复合语句中的局部变量重名,则在复合语句中,函数定义的局部变量无效。,5.6 局部变量和全局变量,例3-2 void main() int i, a=12;for(i=1;i=2;i+) int a;a = i;p

3、rintf(“a=%dn“, a);printf(“a=%dn“, a); ,main函数中的局部变量: i , a,a 是复合语句中的局部变量, 只能在for循环中使用,输出结果: a=1 a=2 a=12,二、全局变量: 指在所有函数之外定义的变量(外部变量),它的有效范围从定义变量的位置开始到本源文件结束。它在程序开始时分配内存空间,程序结束释放内存空间。,5.6 局部变量和全局变量,说明:,全局变量的使用增加了函数间数据联系的渠道,由于在同一文件中的所有函数都能使用全局变量, 所以可以利用全局变量从函数中得到一个以上的返回值,#include int p=1 , q=5 ; float

4、 f1( int a ) float r ;: int s10 ; int f2( int b , int c ) ; int sum ;: float m , n ; void main( ) float x , y ;: ,5.6 局部变量和全局变量,例3-3: 求某班成绩的平均分, 最高分和最低分,#include int max , min ; float average( int s ); void main( ) int i , sc40 ; float aver ;for(i=0; i40 ; i+) scanf(“%d“, ,float average( int s ) int

5、 sum , i ; float ave ; sum=0; max=min=s0;for(i=0; imax) max=si;elseif ( simin ) min=si; ave=sum/40;return ave;,5.6 局部变量和全局变量,在一个源文件中如果局部变量和全局变量同名, 在局部变量起作用的范围内, 全局变量不起作用,例3-4 #include int x=10; void f(void) int x=1;x=x+1;printf(“x=%dn“, x ); void main() x=x+1; printf(“x=%dn“, x); f( ); ,输出结果: x=11 x

6、=2,5.6 局部变量和全局变量,建议不要过多的使用全局变量 (1)全局变量在程序的执行过程中一直占用存储单元 (2)它使函数的通用性降低 (3)它会降低程序的清晰性,5.6 局部变量和全局变量,5.7 变量的存储类别,变量的存储方式分为两类:静态存储方式和动态存储方式,静态存储方式:在程序运行期间由系统分配固定的存储空间,动态存储方式:在程序运行期间根据需要动态的分配存储空间,auto变量,函数中的局部变量如果没有特殊声明则都是auto变量,auto变量的特点:在调用函数时系统为它们分配存储空间,在函数调用结束时自动释放这些存储空间,void main( ) auto int a=3, b=

7、5;auto int z;z = a+b;printf(“z=%dn“,z); ,格式: auto 变量类型 变量名;,如:auto int a;,auto可省略,void main( ) int a=3, b=5;int z;z = a+b;printf(“z=%dn“,z); ,int a;,用static声明局部变量,如果希望函数中的局部变量的值在函数调用结束后不消失 (即局部变量所占用的存储空间不被释放),这时就应该用 static声明该局部变量为“静态局部变量”,自动变量与静态局部变量的区别:,(1) 静态局部变量所占的存储空间在程序整个运行期间都不释放;自动变量的存储空间在函数调用

8、结束时被释放,(2) 静态局部变量只赋初值一次,以后每次调用函数时不再重新赋初值;自动变量每次调用函数都会重新赋初值,(3) 静态局部变量如果不初始化,编译时系统会自动赋初值为0;自动变量如果不初始化,则它的值为一个不确定的值,(4) 虽然静态局部变量所占的存储空间在函数调用结束后仍然存在,但是其他的函数不能引用它,格式: static 变量类型 变量名;,如:static int a;,用static声明局部变量,例3-5 #include void main( ) int f(int); int a=2,i;for(i=0;i2;i+)printf(“%d “,f(a); int f(in

9、t a) auto int b=0;static int c=3;b=b+1; c=c+1;return(a+b+c); ,main,函数f,2,2,0,3,1,4,5,0,1,2,0,1,结果:7 8,static int c;c=3;结果?,static int c;结果?,printf(“%d n“,c); 可否输出c?,register变量,由于寄存器的存取速度远远高于内存的存取速度,为此可以将一些频繁使用的变量声明为register变量,说明:,(1) 只有局部自动变量和形式参数可以作为寄存器变量,(2) 一个计算机系统中的寄存器数量是有限的,不能定义任意多个寄存器变量,(3) 当前

10、的优化编译系统能够识别使用频繁的变量,并自动将它们放在寄存器中,所以不需要程序员来指定寄存器变量,格式: register 变量类型 变量名;,如:register int a;,用extern声明外部变量,1. 用extern扩展全局变量的作用域,例3-6 #include void main( ) int max(int, int); printf(“%dn“,max(A,B); int A=13,B=-8; int max( int x, int y) int z;z=xy?x:y;return(z); ,#include void main( ) int max(int, int);

11、extern A,B;printf(“%dn“,max(A,B); int A=13,B=-8; int max( int x, int y) int z;z=xy?x:y;return(z); ,出错,声明A,B是已定义的全局变量,用extern声明外部变量,2. 在多文件程序中声明外部变量,如果程序由多个源程序文件组成,在一个文件中想引用另一个文件中已定义的变量,就需要使用extern,例3-7:源程序文件file1.cpp #include int A; void main( ) int power(int);int b=3,c,d,m;scanf(“%d%d“, ,源程序文件file2

12、.cpp extern A; int power(int n) int i, y=1;for(i=1;i=n;i+)y=y*A;return(y); ,声明A是外部变量,使用变量A,用static声明外部变量,如果希望外部变量只限于本文件引用,而不能被其他文件引用,可以定义外部变量时加static声明。,源程序文件file1.cpp #include static int A; void main( ) int power(int);int b=3,c,d,m;scanf(“%d%d“, ,源程序文件file2.cpp extern A; int power(int n) int i, y=1

13、;for(i=1;i=n;i+)y=y*A;return(y); ,思考一下作用是什么?,无法使用A,如果一个函数只能被本文件中的其他函数调用,称为内部函数。,5.8.1内部函数,格式:static 数据类型 函数名(形参表);,源程序文件file1.cpp #include static void aaa(); void main( ) aaa(); ,源程序文件file2.cpp #include static void aaa() printf(“hello2n“); void bbb() aaa(); ,不可以调用,可以调用,如果一个函数能被其他文件中的函数调用,称为外部函数。,5.8

14、.2 外部函数,格式:extern 数据类型 函数名(形参表);,例3-8:源程序文件file1.cpp #include extern void bbb(); void main( ) bbb(); ,源程序文件file2.cpp #include extern void bbb() printf(“bbbn“); ,注:如果不写extern,系统默认为外部函数。,内部函数和外部函数混合编程,例3-9:源程序文件file1.cpp #include static void aaa() printf(“file1n“); void main( ) aaa();,源程序文件file2.cpp #include static void aaa() printf(“file2n“); ,调用的是哪个函数aaa?,void ccc() aaa(); ,ccc();,是否可调用ccc?,运行结果?,结果: file1file2,将file1和file2中的函数aaa去掉static是否可以?,void ccc();,实验指导P77 实验5, 实验题目(3) 提示:仿照课本P160 例5.25,实验,Class is over,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报