资源描述:
《C语言程序设计第12讲(2012级函数3).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十二讲Begin:第七章函数变量的存储类别外部函数内部函数对变量的定义需要给出两方面的属性:指变量的名称、类型、取值范围和占据存贮空间的大小。如整型,实型,字符型等。变量存在的时间(生存期)、作用范围和在硬件中存放的地点(区域)。数据类型:存储类别:一、变量的存储类型7.9变量的存储方式和生存期变量定义的一般形式为:7.9变量的存储方式和生存期内存中供用户使用的空间有三部分:用户区程序区静态存储区动态存储区存放程序的可执行代码。存放全局变量和静态局部变量。存放函数调用时调用函数的现场保护、自动局部变量和函数形参。7.9变量的存储方式和生存期1、自动变量用关键字auto作存储类型说
2、明的局部变量(包括形参)称为自动变量。自动变量存放在动态存储区,都是动态分配存储空间的。例:main(){autointx,y;······}intfun(autointa){autointb,c,d;······}7.9.1局部变量的存储类别1、自动变量C语言规定:在局部变量的定义中,可省略关键字auto。即:没有指明存储类别的变量,一律隐含为:自动变量。例:main(){intx,y;······}intfun(inta){intb,c,d;······}7.9.1局部变量的存储类别例自动变量的特点示例。(看存储区说明)#includevoidf(intn){
3、autoints=0;/*auto可以省略*/s=s+1;printf("No.%d:s=%d",n,s);}voidmain(){intnum;for(num=1;num<4;num++)f(num);}程序运行结果:NO.1:s=1NO.2:s=1NO.3:s=17.9.1局部变量的存储类别2、静态变量所有全局变量和用关键字static作存储类型说明的局部变量称为静态变量。7.9.2变量的存储类别静态变量存放在静态存储区,一旦为其分配了存储单元,它们在整个程序执行期间将固定地占用这些存储单元。静态变量举例main(){staticinta=2,k;}7.9.2变量的存储类别
4、2、静态变量所有全局变量都是静态类的,C规定,在定义全局变量时“static”可以省去不写。7.9.2变量的存储类别静态全局变量仅能为本源文件中各函数使用,不能为本源文件以外的其他源文件使用。静态变量举例(画出存储区说明)intfun(intx){staticintm=0,n=5;/*定义m,n为静态局部变量*/inty=0;printf("m=%d,n=%d,y=%d",m,n,y);m++;n++;y++;return(x+y+m+n);}main(){inta=2,k;for(k=1;k<=3;k++)printf("%d)fun(%d)=%d",k,a,fun(a
5、));}程序运行结果:m=0,n=5,y=01)fun(2)=10m=1,n=6,y=02)fun(2)=12m=2,n=7,y=03)fun(2)=147.9.2变量的存储类别例局部静态变量的特点示例。#includevoidf(intn){staticints=0;s=s+1;printf("No.%d:s=%d",n,s);}voidmain(){intnum;for(num=1;num<4;num++)f(num);}程序运行结果:NO.1:s=1NO.2:s=2NO.3:s=37.9.2变量的存储类别静态变量的特点:静态局部变量在整个程序运行期间固定
6、占有存储单元。7.9.2变量的存储类别静态局部变量和全局变量一样,只在编译时赋初值一次,以后每次函数调用时使用上次函数调用结束时的保留值.静态变量的特点:静态局部变量定义时如不赋初值,系统编译时会自动对数值型静态局部变量赋初值为0;对字符型静态局部变量赋初值为空字符。7.9.2变量的存储类别静态局部变量仅能为本函数使用,其他函数不能使用和影响它们。自动变量和静态局部变量区别:自动变量的值在函数调用结束后不再保留,下次调用不能使用已有的值。7.9变量的存储方式和生存期静态局部变量在函数调用结束后,仍然保留上次调用结束的值。func(inta,intb){staticintm=0,i=
7、2;i+=m+1;m=i+a+b;returnm;}main(){intk=4,m=1,p;p=func(k,m);printf(“p=%d”,p);p=func(k,m);printf(“p=%d”,p);}求程序运行结果程序运行结果:p=8p=17函数练习题:求程序运行结果intf2(inta,intb){a++;b++;returnb;}intf1(intx,inty){intn=0,b=0;staticinta=0;a=a+x;b=b+y;f2(a,b