您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > C_chap05_ref2
南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›变量的作用域与变量的存储类别第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.1局部变量内部变量:在一个函数内部定义的变量称内部变量。它只在本函数范围内有效,即:只有在本函数内才能使用这些变量,故称为“局部变量”。floatf1(inta)/*函数f1*/{intb,c;…/*a、b、c有效*/}charf2(intx,inty)/*函数f2*/{inti,j;/*x、y、i、j有效*/}voidmain()/*主函数*/{intm,n;…/*m、n有效*/}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.1局部变量内部变量:⑴主函数中定义的变量只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。⑵不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰。⑶形式参数也是局部变量。⑷在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.1局部变量内部变量:voidmain(){inta,b;……{intc;c=a+b;c在此范围内有效a,b在此范围内也有效……}…}复合语句也称为“分程序”或“程序块”。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量外部变量:函数之外定义的变量称为外部变量。外部变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。所以也称全程变量。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量外部变量:intp=1,q=5;/*外部变量*/floatf1(inta)/*定义函数f1*/{intb,c;…}charc1,c2;/**/charf2(intx,inty)/*定义函数f2*/{inti,j;全局变量p,q的作用范围…全局变量c1,c2的作用范围}voidmain()/*主函数*/{intm,n;…}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量例8.15有一个一维数组,内放10个学生成绩,写一个函数,求出平均分、最高分和最低分。#includestdio.hfloatMax=0,Min=0;/*全局变量*/voidmain(){floataverage(floatarray[],intn);floatave,score[10];inti;for(i=0;i10;i++)scanf(“%f”,&score[i]);ave=average(score,10);printf(“max=%6.2f\nmin=%6.2f\naverage=%6.2f\n“,Max,Min,ave);}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量floataverage(floatarray[],intn)/*定义函数,形参为数组*/{inti;floataver,sum=array[0];Max=Min=array[0];for(i=1;in;i++){if(array[i]Max)Max=array[i];elseif(array[i]Min)Min=array[i];sum=sum+array[i];}aver=sum/n;return(aver);}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量建议:一般不使用全局变量,因为:⑴全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元。⑵使用全局变量过多,会降低程序的清晰性。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此,要限制使用全局变量。⑶降低函数的通用性。因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把C程序中的函数做成一个封闭体,除了可以通过“实参——形参”的渠道与外界发生联系外,没有其他渠道。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.8局部变量和全局变量--8.8.2全局变量例8.16外部变量与局部变量同名。#includestdio.hinta=3,b=5;/*a,b为外部变量*/a,b作用范围voidmain(){inta=8;/*a为局部变量*/局部变量a作用范围printf(“%d”,max(a,b));全局变量b的作用范围}max(inta,intb)/*a,b为局部变量*/{intc;c=ab?a∶b;形参a、b作用范围return(c);}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.1动态存储方式与静态存储方式从变量的作用域(即从空间)角度来分,可分为:全局变量局部变量从变量值存在的时间角度来分,可分为:静态存储方式:指在程序运行期间由系统分配固定的存储空间的方式。动态存储方式:则是在程序运行期间根据需要进行动态的分配存储空间的方式。该存储空间可分为:⑴程序区⑵静态存储区⑶动态存储区第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.1动态存储方式与静态存储方式变量和函数有两个属性:数据类型数据的存储类别:数据在内存中存储的方式。存储方式分为两大类:静态存储类动态存储类⑴自动的(auto)⑵静态的(static)⑶寄存器的(register)⑷外部的(extern)根据变量的存储类别,可以知道变量的作用域和生存期。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.2auto变量自动变量auto:专门声明为static存储类别的局部变量都是动态分配存储空间,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类。例如:intf(inta)/*定义f函数,a为形参*/{autointb,c=3;/*定义b、c为自动变量*/…}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.3用static声明局部变量静态变量static:当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量。用关键字static进行声明。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.3用static声明局部变量例8.17考察静态局部变量的值。#includestdio.hvoidmain(){intf(int);inta=2,i;for(i=0;i3;i++)printf(“%d”,f(a);}intf(inta){autointb=0;staticc=3;b=b+1;c=c+1;return(a+b+c);}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.3用static声明局部变量对静态局部变量的说明:⑴静态局部变量属静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。⑵对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。⑶如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。⑷虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.3用static声明局部变量例8.18输出1到5的阶乘值。#includestdio.hvoidmain(){intfac(intn);inti;for(i=1;i=5;i++)printf(“%d!=%d\n”,i,fac(i));}intfac(intn){staticintf=1;f=f*n;return(f);}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.4register变量寄存器变量register:变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.4register变量寄存器变量register的使用:如果有一些变量使用频繁,则为存取变量的值要花费不少时间。为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量,用关键字register作声明。第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.5用extern声明外部变量外部变量:外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。用extern来声明外部变量,以扩展外部变量的作用城。用extern声明外部变量:在一个文件内声明外部变量在多文件的程序中声明外部变量第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.5用extern声明外部变量例8.20用extern声明外部变量,扩展它在程序文件中的作用域。#includestdio.hvoidmain(){intmax(int,int);/*外部变量声明*/externA,B;printf(%d\n,max(A,B));}intA=13,B=-8;/*定义外部变量*/intmax(intx,inty)/*定义max函数*/{intz;z=xy?x:y;return(z);}第8章函数南昌航空大学信息工程学院计算机应用技术系刘琳岚‹#›8.9变量的存储类别--8.9.5用extern声明外部变量例8.21用extern将外部变量的作用域扩展到其他文件。本程序的作用是给定b的值,输入a和m,求a×b和am的值。文件file1.c中的内容为:#includestdio.hintA;/*定义外部变量*/voidmain(){intpower(int);/*函数声明*/intb=3,c,d,m;printf(“enterthenumberaanditspowerm:\n”);scanf(“%d,%d”,&A,&m);c=A*b;pri
本文标题:C_chap05_ref2
链接地址:https://www.777doc.com/doc-3972738 .html