欢迎来到天天文库
浏览记录
ID:61960464
大小:121.00 KB
页数:21页
时间:2020-02-25
《第13讲 变量的存储类别.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第13讲变量的存储类型、内部和外部函数一、变量的存储类型1、自动变量2、静态变量3、寄存器变量4、外部变量二、内部函数和外部函数1、内部函数2、外部函数数据类型:指变量的名称、类型、取值范围和占据存贮空间的大小。如整型,实型,字符型等。变量定义的一般形式:存储类型数据类型 变量名称;说明:存储类型可以是auto、static、register和extern。一、变量的存储类型(方式)对变量的定义需要给出下面两方面的属性:存储类型:变量存在的时间(生存期)、作用范围和在硬件中存放的地点(区域)。1、自动变量用关键字auto作存储类型说明的局部变量(包括形参)称为自动变量。变量的生存期
2、为定义它的函数。main(){intx,y;······}inthanshu(autointa){autointb,c,d;······}C语言规定:在局部变量的定义中,可省略关键字auto。即:没有指明存储类别的变量,一律隐含为自动变量。例如:2、外部变量用关键字extern作存储类型说明的变量称为外部变量。外部变量与全局变量是对同一类变量的两种不同角度的提法。全局变量是从作用域的角度,用来表示变量的作用范围,而外部变量是从变量是从存储类型的角度提出的,用来表示变量的生存期。C语言规定:1)对共用的外部变量可以在任一源文件中定义一次,其他源文件中用extern对其声明后,即可使用
3、。3)外部变量的声明可以有多次,其位置在定义点之前任意处,不需要分配存储空间。4)外部变量的定义只有一次,其位置只能在函数外,并可对外部变量分配存储单元,初始化。2)如果希望某些外部变量仅限于本文件使用,则在定义外部变量时前面加一个static说明。称为静态局部变量。#includeintmax(inta,intb){intc;c=a>b?a:b;returnc;}voidmain(){externx,y;/*声明外部变量*/printf("%d",max(x,y));}intx=12,y=-8;/*定义外部变量*/例1外部变量使用举例(在同一源文件内)程运行
4、结果:12注意:如果省略了主函数中的外部变量声明,程序将出现编译错误,违法了变量先定义后使用的规则。//文件1:f1.cpp#include#include"c:userf2.c"intx;//定义外部变量main(){inta=3,b=4;x=a;printf("%d",pow1(b));}例2外部变量使用举例(在两个文件中)求ab。//文件2:f2.cexternintx;/*声明外部变量*/intpow1(intn){inti,y=1;for(i=1;i<=n;i++)y=y*X;returny;}程运行结果:813、静态变量用关键字static作存
5、储类型说明的局部变量称为静态变量。inthanshu(inta){staticintb,c,d;······}静态变量存放在静态存储区,一旦为其分配了存储单元,它们在整个程序执行期间将固定地占用这些存储单元。即:变量的生存期为整个程序。#includevoidf(intn){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写出下面程序的执行结果(自动变量的生存期)#includevoid
6、f(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写出下面程序的执行结果(静态变量的生存期)自动变量和静态局部变量区别:区别1:自动变量的值在函数调用结束后不再保留,下次调用时丢失了原有的值。因此,每次调用函数时,都要初始化。静态局部变量在函数调用结束后,仍然保留上次调用结束时的值(存在但不一定能使用)。因此,只有在第1次调用函数时才初始化。区别2:自动变量在函数中如果不初始化,它的初值为一个不确定的值。静
7、态局部变量在函数中如果不初始化,它的初值为0。#includevoidf(){autoints;//auto可省略s=s+1;printf("s=%d",s);}voidmain(){intn;for(n=1;n<4;n++)f();}程运行结果:s=××s=××s=××例3写出下面程序的执行结果(自动变量未初始化)#includevoidf(){staticints;//静态变量s=s+1;printf("s=%d",s)
此文档下载收益归作者所有