资源描述:
《嵌套和递归的过程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第14次复习嵌套和递归的过程正课6.2变量的作用域和生命周期一、概述1、变量是对程序中数据的存储空间的抽象2、变量的属性1)数据类型:变量所持有的数据的性质(操作属性)2)存储属性u存储器类型:寄存器、静态存储区、动态存储区u生存期:变量在某一时刻存在-------静态变量与动态变量20u作用域:变量在某区域内有效-------局部变量与全局变量3、变量的存储类型uauto-----自动型uregister-----寄存器型ustatic------静态型uextern-----外部型4、变量定义格式:[存储类型]数据类型变量表;如
2、:intsum;autointa,b,c;registerinti;staticfloatx,y;20二、局部变量与全局变量1、局部变量---内部变量1)定义:在函数内定义,只在本函数内有效2)说明:lmain中定义的变量只在main中有效l不同函数中同名变量,占不同内存单元l形参属于局部变量l可定义在复合语句中有效的变量l局部变量可用存储类型:autoregisterstatic(默认为auto)20floatf1(inta){intb,c;…….}charf2(intx,inty){inti,j;……}main(){intm,n
3、;…….}a,b,c有效x,y,i,j有效m,n有效203)安例①不同函数中同名变量main(){inta,b;a=3;b=4;printf("main:a=%d,b=%d",a,b);sub();printf("main:a=%d,b=%d",a,b);}sub(){inta,b;a=6;b=7;printf("sub:a=%d,b=%d",a,b);}②复合语句中使用变量#defineN5main(){inti;inta[N]={1,2,3,4,5};20for(i=0;i4、=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}for(i=0;i5、i]>max)max=array[i];elseif(array[i]6、=5;externcharc1,c2;floatf1(inta){intb,c;…….externcharc1,c2;}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}204)外部变量定义与外部变量说明不同intmax(intx,inty){intz;z=x>y?x:y;return(z);}main(){externinta,b;printf("max=%d",max(a,b));}inta=13,b=-8;5)若外部变量与局部变量同名,则外部
7、变量被屏蔽inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}20运行结果:max=86)外部变量可用存储类型:缺省或static7)应尽量少使用全局变量,因为:u全局变量在程序全部执行过程中占用存储单元u降低了函数的通用性、可靠性,可移植性u降低程序清晰性,容易出错三、动态变量与静态变量1、存储方式静态存储:程序运行期间分配固定存储空间动态存储:程序运行期间根据需要动态分配存储空间2、内存用户区20
8、程序区静态存储区动态存储区全局变量、局部静态变量形参变量局部动态变量(autoregister)函数调用现场保护和返回地址等3、生存期静态变量:从程序开始执行到程序结束动态变量:从包含该变量定义的函数开始执行至函数执行结束204、安例