资源描述:
《第10讲变量的存储类别和预处理ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10讲变量的存储类型、预处理数据类型:指变量的名称、类型、取值范围和占据存贮空间的大小。如整型,实型,字符型等。变量定义的一般形式:存储类型 数据类型 变量名称;说明:存储类型可以是auto、static、register和extern。对变量的定义需要给出下面两方面的属性:存储类型:变量存在的时间(生存期)、作用范围和在硬件中存放的地点(区域)。一、变量的存储类型(方式)(P218)1、auto自动变量(P219)main(){intx,y;······}inthanshu(autointa){autointb,c,d;······
2、}C语言规定:在局部变量的定义中,可省略关键字auto。即:没有指明存储类别的变量,一律隐含为自动变量。例如:用关键字auto作存储类型说明的局部变量(包括形参)称为自动变量。变量的生存期为定义它的函数。2、static静态变量(P219)inthanshu(inta){staticintb,c,d;······}静态变量存放在静态存储区,一旦为其分配了存储单元,它们在整个程序执行期间将固定地占用这些存储单元。即:变量的生存期为整个程序。用static作存储类型说明的局部变量称为静态变量。#includevoidf(i
3、ntn){autoints=10;//auto可省略s=s+1;printf("s=%d",s);}voidmain(){intn;for(n=1;n<4;n++)f(n);}程运行结果:s=11s=11s=11例1写出下面程序的执行结果(自动变量的生存期)#includevoidf(intn){staticints=10;//静态变量s=s+1;printf("s=%d",s);}voidmain(){intn;for(n=1;n<4;n++)f(n);}程运行结果:s=11s=12s=13例2写出下面程序的
4、执行结果(静态变量的生存期)区别1:自动变量的值在函数调用结束后不再保留,下次调用时丢失了原有的值。因此,每次调用函数时,都要初始化。静态局部变量在函数调用结束后,仍然保留上次调用结束时的值(存在但不一定能使用)。因此,只有在第1次调用函数时才初始化。区别2:自动变量在函数中如果不初始化,它的初值为一个不确定的值。静态局部变量在函数中如果不初始化,它的初值为0。自动变量和静态局部变量区别:#includevoidf(){autoints;//auto可省略s=s+1;printf("s=%d",s);}void
5、main(){intn;for(n=1;n<4;n++)f();}程运行结果:s=××s=××s=××例3写出下面程序的执行结果(自动变量未初始化)#includevoidf(){staticints;//静态变量s=s+1;printf("s=%d",s);}voidmain(){intn;for(n=1;n<=3;n++)f();}程运行结果:s=1s=2s=3例4写出下面程序的执行结果(静态变量的未初始化)#includevoidf(){staticints=10;//静态变量s=s+1;p
6、rintf("s=%d",s);}voidmain(){f();printf("s=%d",s);}例5指出下面程序中的错误错误:变量s不能在主函数中使用。请特别注意:区分静态变量的生存期和作用域。3、register寄存器变量(P221)说明:(1)寄存器变量只能用于基本整型变量、短整型整型变量和字符型变量。(2)寄存器变量的分配方式是动态分配的。(3)由于CPU中的通用寄存器数目有限,通常只把少数使用频繁的变量定义为寄存器变量。对超出寄存器数目的寄存器变量作一般自动变量处理。用register作存储类型说明的局部变量。其作用
7、是加快速度。(寄存器在CPU中,其余的变量存放在内存中)。#includeintfac(intn){registerinti,f=1;/*定义i,f为寄存器变量*/for(i=1;i<=n;i++)f=f*i;returnf;}main(){intk;for(k=1;k<=5;k++)printf("%d!=%d",k,fac(k));}例求n!的函数。#includeintfunc(inta,intb){intc;c=a+b;returnc;}voidmain(){intx=6,y=7,z=8,
8、r;r=func((x--,y++,x+y),z--);printf("r=%d",r);}提示:主函数中的表达式:x--,y++,x+y的值为13。例写出下面程序的执行结果(静态变量的生存期)程运行结