武汉大学C课件第12讲(05级).ppt

武汉大学C课件第12讲(05级).ppt

ID:48223543

大小:245.50 KB

页数:20页

时间:2020-01-18

上传者:U-4623
武汉大学C课件第12讲(05级).ppt_第1页
武汉大学C课件第12讲(05级).ppt_第2页
武汉大学C课件第12讲(05级).ppt_第3页
武汉大学C课件第12讲(05级).ppt_第4页
武汉大学C课件第12讲(05级).ppt_第5页
资源描述:

《武汉大学C课件第12讲(05级).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第十二讲Begin:第七章函数变量的存储类别外部函数内部函数 对变量的定义需要给出两方面的属性:指变量的名称、类型、取值范围和占据存贮空间的大小。如整型,实型,字符型等。变量存在的时间(生存期)、作用范围和在硬件中存放的地点(区域)。数据类型:存储类别:变量定义的一般形式为:一、变量的存储类型7.3.2变量的存储类别 内存中供用户使用的空间有三部分:用户区程序区静态存储区动态存储区存放程序的可执行代码。存放全局变量和静态局部变量。存放函数调用时调用函数的现场保护、自动局部变量和函数形参。7.3.2变量的存储类别 1、自动变量用关键字auto作存储类型说明的局部变量(包括形参)称为自动变量。自动变量存放在动态存储区,都是动态分配存储空间的。C语言规定:在局部变量的定义中,可省略关键字auto。即:没有指明存储类别的变量,一律隐含为:自动变量。例:main(){intx,y;······}inthanshu(autointa){autointb,c,d;······}7.3.2变量的存储类别 例自动变量的特点示例。#includevoidf(intn){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.3.2变量的存储类别 2、静态变量所有全局变量和用关键字static作存储类型说明的局部变量称为静态变量。静态变量存放在静态存储区,一旦为其分配了存储单元,它们在整个程序执行期间将固定地占用这些存储单元。由于所有全局变量都是静态类的,C规定,在定义全局变量时“static”可以省去不写。静态全局变量仅能为本源文件中各函数使用,不能为本源文件以外的其他源文件使用。7.3.2变量的存储类别 静态变量举例inthanshu(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)hanshu(%d)=%d ",k,a,hanshu(a));}程序运行结果:m=0,n=5,y=01)hanshu(2)=10m=1,n=6,y=02)hanshu(2)=12m=2,n=7,y=03)hanshu(2)=147.3.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.3.2变量的存储类别 静态变量的特点:静态局部变量在整个程序运行期间固定占有存储单元。静态局部变量和全局变量一样,只在编译时赋初值一次,以后每次函数调用时使用上次函数调用结束时的保留值.静态局部变量定义时如不赋初值,系统编译时会自动对数值型静态局部变量赋初值为0;对字符型静态局部变量赋初值为空字符。静态局部变量仅能为本函数使用,其他函数不能使用和影响它们。7.3.2变量的存储类别 自动变量和静态局部变量区别:自动变量的值在函数调用结束后不再保留,下次调用不能使用已有的值。静态局部变量在函数调用结束后,仍然保留上次调用结束的值。7.3.2变量的存储类别 在选择使用静态局部变量还是自动变量,可以从以下两点考虑:如果需要在两次函数调用之间保持上一次函数调用结果,可以使用局部静态变量;如果在每次调用函数时都必须对局部变量初始化,选择自动变量。但是实际上局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。7.3.2变量的存储类别 3、寄存器变量(register)寄存器变量:用关键字register作存储类型说明的局部变量。说明:寄存器变量只能用于基本整型变量、短整型整型变量和字符型变量。寄存器变量的分配方式是动态分配的。由于CPU中的通用寄存器数目有限,通常只把少数使用频繁的变量定义为寄存器变量。对超出寄存器数目的寄存器变量作一般自动变量处理。7.3.2变量的存储类别 例求n!的函数intfac(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));}7.3.2变量的存储类别 4、外部变量(extern)外部变量是指在函数之外定义的变量。外部变量也称全局变量。它的作用域通常从变量的定义处开始,直到本程序文件的结束处。外部变量的定义通常放在所有使用它的函数前面。利用关键字extern对外部变量加以声明时,可以是在一个源文件内,也可以在多个文件组成的程序中。7.3.2变量的存储类别 对于由多个源文件组成C程序,C语言规定:对共用的外部变量可以在任一源文件中定义一次,其他源文件中用extern对其声明后,即可使用。如果希望某些外部变量仅限于本文件使用,则在定义外部变量时前面加一个static说明。外部变量的声明可以有多次,其位置在定义点之前任意处,不需要分配存储空间。外部变量的定义只有一次,其位置只能在函数外,并可对外部变量分配存储单元,初始化。7.3.2变量的存储类别 例外部变量举例(在同一源文件内)intmax(inta,intb) {intc; c=a>b?a:b; return(c); }main(){externX,Y;/*声明外部变量*/printf("%d ",max(X,Y));}intX=12,Y=-8;/*定义外部变量*/7.3.2变量的存储类别 例:外部变量举例(在两个文件中)求ab。文件1:f1.c#include"c:userf2.c"intX;/*定义外部变量*/main(){inta=4,b=5;X=a;printf("%d ",pow(b));}文件2:f2.cexternintX;/*声明外部变量*/intpow(intn){inti,y=1;for(i=1;i<=n;i++)y=y*X;returny;}7.3.2变量的存储类别 1、内部函数只能被其所在文件内的函数调用,而不能被其他文件内的函数所调用的函数称为内部函数。格式:static类型标识符函数名(形参)7.4内部函数和外部函数内部函数也称静态函数。内部函数不能被其他文件中的函数使用,所以在不同文件中可以使用相同名字的内部函数。 2、外部函数能被其他文件调用的函数称为外部函数。格式:extern类型标识符函数名(形参)7.4内部函数和外部函数在C语言中,函数前如果无关键字extern,隐含其为外部函数。外部函数只能在所有使用它的文件中定义一次。外部函数在调用它的其他文件中,要用extern加函数原型加以说明,方可使用。 TheEnd上机实验内容:⑴熟悉变量的存储类别以及内部和外部函数的定义和调用;⑵《实验教程》第7章函数实验3(1),实验4(3)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭