




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 1 1变量的作用域变量的作用域与变量的存储类不与变量的存储类不 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 2 28.8 局部变量和全局变量局部变量和全局变量8.8.1 局部变量局部变量n内部变量内部变量:n在一个函数内部定义的变量称内部变量在一个函数内部定义的变量称内部变量.它它只在本函数范畴内有效只在本函数范畴内有效,即即:只有在本函数内只有在本函数内才能使用这些变量才能使用这些变量,故称为故称为“局部变量局部变量” .n f
2、loat f1( int a) * 函数函数f1 *n int b,c;n * a、b、c有有效效 *n nchar f2(int x,int y) * 函数函数f2 *n int i,j; * x、y、i、j有效有效 *n nvoid main( ) * 主函数主函数 *n int m,n;n * m、n有效有效 *n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 3 38.8 局部变量和全局变量局部变量和全局变量8.8.1 局部局部变量变量n 内部变量内部变量:n 主函数中定义的变量只在主函数中有主函数中定义的变量只在主
3、函数中有效效,而不因为在主函数中定义而在整个文而不因为在主函数中定义而在整个文件或程序中有效件或程序中有效.主函数也不能使用其他主函数也不能使用其他函数中定义的变量函数中定义的变量.n 差别函数中能够使用一样名字的变量差别函数中能够使用一样名字的变量,它们代表差别的对象它们代表差别的对象,互不干扰互不干扰.n 形式指标也是局部变量形式指标也是局部变量.n 在一个函数内部在一个函数内部,能够在复合语句中能够在复合语句中定义变量定义变量,这些变量只在本复合语句中有这些变量只在本复合语句中有效效,这种复合语句也称为这种复合语句也称为“分程序分程序”或或“程序块程序块”.第第8 8章函数章函数南昌航空
4、大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 4 48.8 局部变量和全局变量局部变量和全局变量8.8.1 局部局部变量变量n 内部变量内部变量:n void main ( )n int a,b;n n int c;n c=a+b; c在此范畴内有效在此范畴内有效 a,b在在此范畴内也有效此范畴内也有效n n n n n 复合语句也称为复合语句也称为“分程序分程序”或或“程序块程序块”.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 5 58.8 局部变量和全局变量局部变量和全局变量8.
5、8.2 全局全局变量变量n 外部变量外部变量:n 函数之外定义的变量称为外部变量函数之外定义的变量称为外部变量.外部变量能够外部变量能够为本文件中其他函数所共用为本文件中其他函数所共用.它的有效范畴为从定它的有效范畴为从定义变量的位置最先到本源文件结束义变量的位置最先到本源文件结束.所以也称全程所以也称全程变量变量. 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 6 68.8 局部变量和全局变量局部变量和全局变量8.8.2 全局全局变量变量n外部变量外部变量:nint p=1,q=5; * 外部变量外部变量 *n float
6、 f1(int a) * 定义定义函数函数f1 *n int b,c;n n n char c1,c2; * 外外部变量部变量*n char f2 (int x, int y) * 定义定义函数函数f2 *n int i,j; 全局变量全局变量p,q的作用范畴的作用范畴n 全局变量全局变量c1,c2的作用范畴的作用范畴n n void main ( ) * 主主函数函数 *n int m,n;n n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 7 78.8 局部变量和全局变量局部变量和全局变量8.8.2 全局全局变量变量n
7、 例例8.15 有一个一维数组有一个一维数组,内放内放10个学生成绩个学生成绩,写一个函数写一个函数,求出平均分、最高分和最低分求出平均分、最高分和最低分.n #include n float Max=0,Min=0; * 全局变量全局变量 *n void main( )n float average(float array ,int n);n float ave,score10;n int i;n for ( i=0; i10; i+ )n scanf(“%f”,&scorei);n ave=average(score,10);n printf(“max=%6.2fnmin=%6.2
8、fnn average=%6.2fn“,Max,Min,ave);n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 8 88.8 局部变量和全局变量局部变量和全局变量8.8.2 全局全局变量变量nfloat average(float array , int n) *定义函数定义函数,形形参为数组参为数组*n int i;n float aver,sum=array0;n Max=Min=array0;n for ( i=1; iMax )n Max=arrayi;n else if (arrayiMin) Min=arra
9、yi;n sum=sum+arrayi;n n aver=sumn;n return(aver);n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 9 98.8 局部变量和全局变量局部变量和全局变量8.8.2 全局全局变量变量第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 10 108.8 局部变量和全局变量局部变量和全局变量8.8.2 全局全局变量变量n定见定见:一样不使用全局变量一样不使用全局变量,因为因为: n全局变量在程序的全部履行环节中都全局变量在
10、程序的全部履行环节中都占用存储单元占用存储单元,而不是仅在需要时才开发单而不是仅在需要时才开发单元元.n使用全局变量过多使用全局变量过多,会落低程序的清楚会落低程序的清楚性性.在各个函数履行时都大概改变外部变量在各个函数履行时都大概改变外部变量的值的值,程序简单犯错程序简单犯错.所以所以,要限制使用全局要限制使用全局变量变量.n落低函数的通用性落低函数的通用性.因为函数在履行时因为函数在履行时要依靠于其所在的外部变量要依靠于其所在的外部变量.似果将一个函似果将一个函数移到另一个文件中数移到另一个文件中,还要将有关的外部变还要将有关的外部变量及其值共同移已往量及其值共同移已往.但如果该外部变量与
11、但如果该外部变量与其他文件的变量同名时其他文件的变量同名时,便会表现咨询题便会表现咨询题,落落低了程序的靠得住性和通用性低了程序的靠得住性和通用性.一样要求把一样要求把程序中的函数做成一个封闭体程序中的函数做成一个封闭体,除了能够除了能够通过通过“实参实参形参形参”的渠道与外界产生联的渠道与外界产生联系外系外,没有其他渠道没有其他渠道.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 11 118.8 局部变量和全局变量局部变量和全局变量8.8.2 全局全局变量变量n 例例8.16 外部变量与局部变量同名外部变量与局部变量同名.
12、 n #include n int a=3,b=5; *a,b为外部变量为外部变量* a,b作用范作用范畴畴n void main ( )n int a=8; *a为局部变量为局部变量* 局部变量局部变量a作用范作用范畴畴n printf(“%d”,max(a,b); 全局变量全局变量b的作的作用范畴用范畴n n max(int a, int b) *a,b为局部变量为局部变量* n int c;n c=ab?a b; 形参形参a、b作用作用范畴范畴n return (c); n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚
13、 12 128.9 变量的存储类不变量的存储类不8.9.1 动态存储方式与静态动态存储方式与静态存储方式存储方式n 从变量的作用域(即从空间)角度来分从变量的作用域(即从空间)角度来分,可分为可分为:n 全局变量全局变量n 局部变量局部变量n 从变量值存在的时候角度来分从变量值存在的时候角度来分,可分为可分为:n 静态存储方式静态存储方式:指在程序运行期间由系统安排固定的指在程序运行期间由系统安排固定的存储空间的方式存储空间的方式.n 动态存储方式动态存储方式:那么是在程序运行期间依照需要执举那么是在程序运行期间依照需要执举措态的安排存储空间的方式措态的安排存储空间的方式.该存储空间可分为该存
14、储空间可分为:n 程序区程序区 n 静态存储区静态存储区 n 动态存储区动态存储区第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 13 138.9 变量的存储类不变量的存储类不8.9.1 动态存储方式与静态动态存储方式与静态存储方式存储方式n 变量和函数有两个属性变量和函数有两个属性:n 信息类型信息类型n 信息的存储类不信息的存储类不:信息在内存中存储的方式信息在内存中存储的方式.n 存储方式分为两大类存储方式分为两大类:n 静态存储类静态存储类n 动态存储类动态存储类n 自动的(自动的(auto)n 静态的(静态的(sta
15、tic)n 寄存器的(寄存器的(register)n 外部的(外部的(extern)n 依照变量的存储类不依照变量的存储类不,能够明白变量的作用域和生活能够明白变量的作用域和生活期期.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 14 148.9 变量的存储类不变量的存储类不8.9.2 auto变量变量n 自动变量自动变量auto:n 特意表明为特意表明为static存储类不的局部变量根基上动态存储类不的局部变量根基上动态安排存储空间安排存储空间,在调用该函数时系统会给它们安排在调用该函数时系统会给它们安排存储空间存储空间,
16、在函数调用结束时便自动释放这些存储在函数调用结束时便自动释放这些存储空间空间.所以这类局部变量称为自动变量所以这类局部变量称为自动变量.n 自动变量用关键字自动变量用关键字auto作存储类不的表明作存储类不的表明.n 函数中的形参和在函数中定义的变量函数中的形参和在函数中定义的变量(包罗在复合包罗在复合语句中定义的变量语句中定义的变量),都属此类都属此类.n 例似例似:int f(int a) *定义定义f函数函数,a为形参为形参*n auto int b,c=3; *定义定义b、c为自动变量为自动变量*n n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技
17、术系刘琳岚计算机应用技术系刘琳岚 15 158.9 变量的存储类不变量的存储类不8.9.3 用用static表明局表明局部变量部变量n 静态变量静态变量static :n 当函数中的局部变量的值在函数调用结束后不消当函数中的局部变量的值在函数调用结束后不消散而保留原值时散而保留原值时,该变量称为静态局部变量该变量称为静态局部变量.n 用关键字用关键字static履行表明履行表明.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 16 168.9 变量的存储类不变量的存储类不8.9.3 用用static表明局表明局部变量部变量n
18、例例8.17 考查静态局部变量的值考查静态局部变量的值.n #include n void main( )n int f(int);n int a=2,i;n for ( i=0; i3; i+)n printf(“%d”,f(a);n n int f(int a)n auto int b=0;n static c=3;n b=b+1;n c=c+1;n return (a+b+c);n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 17 178.9 变量的存储类不变量的存储类不8.9.3 用用static表明局表明局部变量
19、部变量n 对静态局部变量的讲明对静态局部变量的讲明:n 静态局部变量属静态存储类不静态局部变量属静态存储类不,在静态存储区在静态存储区内安排存储单元内安排存储单元.在程序整个运行期间都不释放在程序整个运行期间都不释放.而自动变量(即动态局部变量)属动态存储类不而自动变量(即动态局部变量)属动态存储类不,占动态存储区空间而不占静态存储区空间占动态存储区空间而不占静态存储区空间,函数调函数调用结束后即释放用结束后即释放.n 对静态局部变量是在编译时赋初值的对静态局部变量是在编译时赋初值的,即只赋即只赋初值一次初值一次,在程序运行时它已有初值在程序运行时它已有初值.往后每次调往后每次调用函数时不再再
20、一次赋初值而只是保留上次函数用函数时不再再一次赋初值而只是保留上次函数调用结束时的值调用结束时的值.n 似在定义局部变量时不赋初值的话似在定义局部变量时不赋初值的话,那么对静那么对静态局部变量来讲态局部变量来讲,编译时自动赋初值(对数值型编译时自动赋初值(对数值型变量)或空字符(对字符变量)变量)或空字符(对字符变量).而对自动变量来而对自动变量来讲讲,似果不赋初值那么它的值是一个不确定的值似果不赋初值那么它的值是一个不确定的值.n 固然静态局部变量在函数调用结束后仍旧存在固然静态局部变量在函数调用结束后仍旧存在,但其他函数不能引用它但其他函数不能引用它.第第8 8章函数章函数南昌航空大学信息
21、工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 18 188.9 变量的存储类不变量的存储类不8.9.3 用用static表明局表明局部变量部变量n 例例8.18 输出输出1到到5的阶乘值的阶乘值.n #include n void main( )n int fac(int n);n int i;n for (i=1; i=5; i+)n printf(“%d!=%dn”, i, fac(i);n n int fac(int n)n static int f=1;n f=f*n;n return(f);n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学
22、信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 19 198.9 变量的存储类不变量的存储类不8.9.4 register变量变量 n 寄存器变量寄存器变量register :n 变量的值是存放在内存中的变量的值是存放在内存中的.当程序中用到哪一个当程序中用到哪一个变量的值时变量的值时,由操纵器发出指令将内存中该变量的由操纵器发出指令将内存中该变量的值送到运算器中值送到运算器中.通过运算器履行运算通过运算器履行运算,似果需要似果需要存数存数,再从运算器将信息送到内存存放再从运算器将信息送到内存存放.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系
23、刘琳岚计算机应用技术系刘琳岚 20208.9 变量的存储类不变量的存储类不8.9.4 register变量变量 n 寄存器变量寄存器变量register的使用的使用:n 似果有部分变量使用频繁似果有部分变量使用频繁,那么为存取变量的值要那么为存取变量的值要破费非常多时候破费非常多时候.n 为提高履行功效为提高履行功效,C语言许可将局部变量的值放在语言许可将局部变量的值放在CPU中的寄存器中中的寄存器中,需要用时直截了当从寄存器取需要用时直截了当从寄存器取出介入运算出介入运算,不必再到内存中去存取不必再到内存中去存取.n 因为对寄存器的存取速度远高于对内存的存取速因为对寄存器的存取速度远高于对内
24、存的存取速度度,所以如此做能够提高履行功效所以如此做能够提高履行功效.n 这种变量叫做寄存器变量这种变量叫做寄存器变量,用关键字用关键字register作表作表明明.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 21 218.9 变量的存储类不变量的存储类不8.9.5 用用extern表明外表明外部变量部变量n 外部变量外部变量:n 外部变量是在函数的外部定义的全局变量外部变量是在函数的外部定义的全局变量,它的它的作用域是从变量的定义处最先作用域是从变量的定义处最先,到本程序文件的到本程序文件的末尾末尾.n 在此作用域内在此
25、作用域内,全局变量能够为程序中各个函数全局变量能够为程序中各个函数所引用所引用.编译时将外部变量安排在静态存储区编译时将外部变量安排在静态存储区.n 用用extern来表明外部变量来表明外部变量,以扩展外部变量的作以扩展外部变量的作用城用城.n 用用extern表明外部变量表明外部变量:n 在一个文件内表明外部变量在一个文件内表明外部变量n 在多文件的程序中表明外部变量在多文件的程序中表明外部变量第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 22228.9 变量的存储类不变量的存储类不8.9.5 用用extern表明外表明外
26、部变量部变量n 例例8.20 用用extern表明外部变量表明外部变量,扩展它在程序扩展它在程序文件中的作用域文件中的作用域.n #include n void main( )n int max(int,int); *外部变量表明外部变量表明*n extern A,B; n printf(%dn,max(A,B);n n int A=13,B=-8; *定义外部变量定义外部变量*n int max(int x,int y) *定义定义max函数函数*n int z;n z=xy?x:y;n return(z);n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用
27、技术系刘琳岚计算机应用技术系刘琳岚 23238.9 变量的存储类不变量的存储类不8.9.5 用用extern表明外表明外部变量部变量n 例例8.21 用用extern将外部变量的作用域扩展到其他文件将外部变量的作用域扩展到其他文件.本程序的作用是给定本程序的作用是给定b的值的值,输入输入a和和m,求求ab和和am的值的值.文件文件file1.c中的内容为中的内容为:n #include n int A; *定义外部变量定义外部变量*n void main( )n int power(int); *函数表明函数表明*n int b=3,c,d,m;n printf(“enter the numb
28、er a and its power m:n”);n scanf(“%d,%d”, &A, &m);n c=A*b;n printf(“%d*%dn”,A,b,c);n d=power(m);n printf(“%d*%d=%dn”,A,m,d);n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 24248.9 变量的存储类不变量的存储类不8.9.5 用用extern表明外表明外部变量部变量n 例例8.21 用用extern将外部变量的作用域扩展到其将外部变量的作用域扩展到其他文件他文件.本程序的作用是给定本
29、程序的作用是给定b的值的值,输入输入a和和m,求求ab和和am的值的值.文件文件file1.cfile1.c中的内容为中的内容为: : #include #include int A; int A; * *定义外部变量定义外部变量* * void main( ) void main( ) int power(int); int power(int); * *函数表明函数表明* * int b=3,c,d,m; int b=3,c,d,m; printf(“enter the number a and its power m:n”); printf(“enter the number a and
30、 its power m:n”); scanf(“%d,%d”, &A, &m); scanf(“%d,%d”, &A, &m); c=A c=A* *b;b; printf(“%d printf(“%d* *%dn”,A,b,c);%dn”,A,b,c); d=power(m); d=power(m); printf(“%d printf(“%d* * *%d=%dn”,A,m,d);%d=%dn”,A,m,d); 文件文件file2.cfile2.c中的内容为中的内容为: : extern A extern A; * *表明表明A A为一个已定义的外部变量为
31、一个已定义的外部变量* * int powre(int n) int powre(int n) int i,y=1; int i,y=1; for ( i=1; i=n; i+) for ( i=1; i=n; i+) y=y y=y* *A;A; return (y); return (y); 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 25258.9 变量的存储类不变量的存储类不8.9.6 用用static表明外表明外部变量部变量n 用用static表明外部变量表明外部变量:n 在程序设计中在程序设计中,某些外部变量只
32、限于被本文件引某些外部变量只限于被本文件引用用,而不能被其他文件引用而不能被其他文件引用.n 这时能够在定义外部变量时加一个这时能够在定义外部变量时加一个staitic表明表明.n 例似例似:n file1.c static int A; extern int A;n void main( ) void fun(int n)n n A=A*n;n 第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 26268.9 变量的存储类不变量的存储类不8.9.7 对于变量的表明对于变量的表明和定义和定义n 定义性表明定义性表明:n 需要创站
33、存储空间的表明需要创站存储空间的表明,例似例似:int a;n 引用性表明引用性表明:n 不需创站存储空间的表明不需创站存储空间的表明,例似例似:extern a;n 注重注重:n 表明包罗定义表明包罗定义,但同时非全部的表明根基上定义但同时非全部的表明根基上定义.n 对对“int a;” 而言而言,它既是表明它既是表明,又是定义又是定义.n 对对“extern a;” 而言而言,它是表明而不是定义它是表明而不是定义.第第8 8章函数章函数南昌航空大学信息工程学院南昌航空大学信息工程学院计算机应用技术系刘琳岚计算机应用技术系刘琳岚 27278.9 变量的存储类不变量的存储类不8.9.8 存储类不存储类不小结小结n 从作用域角度分从作用域角度分, ,有局部变量和全局变量有局部变量和全局变量. .它们采纳的存储类不似下它们采纳的存储类不似下: :n局部变量包罗局
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB 31648-2025食品安全国家标准食品中二噁英及多氯联苯污染控制规范
- 景德镇陶瓷大学《微积分一》2023-2024学年第二学期期末试卷
- 湖南第一师范学院《数学专题讲座》2023-2024学年第一学期期末试卷
- 湖北艺术职业学院《影视文学与评论》2023-2024学年第一学期期末试卷
- 郑州轻工业大学《乐理基础与视唱(一)》2023-2024学年第二学期期末试卷
- 湛江幼儿师范专科学校《单片机原理及应用》2023-2024学年第二学期期末试卷
- 委托房屋买卖合同书
- 房屋租赁合同附清单
- 买卖暂不过户二手房合同
- 垃圾清运清理合同
- 1-3个月宝宝智护训练课件
- 浅析新时代教育评价改革机制及实践路径
- 机械制图综合练习题
- 世界社会主义五百年
- 2019年自考《世界市场行情》模拟试题及答案
- 伊利经销商设立、变更、撤销、评估管理及考核办法
- 《中华人民共和国军人地位和权益保障法》重点内容学习PPT课件(带内容)
- LB/T 018-2011旅游饭店节能减排指引
- GB/T 5162-2021金属粉末振实密度的测定
- GB/T 12755-2008建筑用压型钢板
- FZ/T 73020-2019针织休闲服装
评论
0/150
提交评论