《第十二章 变量的作用域和存储类优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第十二章 变量的作用域和存储类优秀PPT.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十二章 变量的作用域和存储类第一页,本课件共有16页v变量的属性l数据类型:变量所持有的数据的性质(操作属性)l存储属性u存储器类型:寄存器、静态存储区、动态存储区u生存期:变量在某一时刻存在-静态变量与动态变量u作用域:变量在某区域内有效-局部变量与全局变量v变量的存储类型lauto -自动型lregister-寄存器型lstatic -静态型lextern -外部型v变量定义格式:存储类型 数据类型 变量表;第十二章 变量的作用域和存储类概述v变量是对程序中数据的存储空间的抽象如:int sum;auto int a,b,c;register int i;static float x,y
2、;第二页,本课件共有16页局部变量与全局变量v局部变量-内部变量l定义:在函数内定义,只在本函数内有效l说明:umain中定义的变量只在main中有效u不同函数中同名变量,占不同内存单元u形参属于局部变量u可定义在复合语句中有效的变量u局部变量可用存储类型:auto register static (默认为auto)例 复合语句中变量#define N 5main()int i;int aN=1,2,3,4,5;for(i=0;iN/2;i+)int temp;temp=ai;ai=aN-i-1;aN-i-1=temp;for(i=0;i 应尽量少使用全局变量,因为:Y全局变量在程序全部执行过
3、程中占用存储单元Y降低了函数的通用性、可靠性,可移植性Y降低程序清晰性,容易出错l外部变量说明:extern 数据类型 变量表;l外部变量定义与外部变量说明不同l若外部变量与局部变量同名,则外部变量被屏蔽l外部变量可用存储类型:缺省 或 static第四页,本课件共有16页float max,min;float average(float array,int n)int i;float sum=array0;max=min=array0;for(i=1;imax)max=arrayi;else if(arrayiy?x:y;return(z);main()extern int a,b;prin
4、tf(max=%d,max(a,b);int a=13,b=-8;运行结果:max=13extern int a,b;int max()int z;z=ab?a:b;return(z);main()printf(max=%d,max();int a=13,b=-8;第六页,本课件共有16页int a=3,b=5;max(int a,int b)int c;c=ab?a:b;return(c);main()int a=8;printf(max=%d,max(a,b);例 外部变量与局部变量同名运行结果:max=8第七页,本课件共有16页int i;main()void prt();for(i=0
5、;i5;i+)prt();void prt()for(i=0;i5;i+)printf(“%c”,*);printf(“n”);例 外部变量副作用运行结果:*第八页,本课件共有16页动态变量与静态变量v存储方式l静态存储:程序运行期间分配固定存储空间l动态存储:程序运行期间根据需要动态分配存储空间v内存用户区程序区静态存储区动态存储区全局变量、局部静态变量形参变量局部动态变量(auto register)函数调用现场保护和返回地址等v生存期l静态变量:从程序开始执行到程序结束l动态变量:从包含该变量定义的函数开始执行至函数执行结束第九页,本课件共有16页变量存储类型静态动态存储方式程序整个运行
6、期间函数调用开始至结束生存期编译时赋初值,只赋一次每次函数调用时赋初值自动赋初值0或空字符不确定未赋初值静态存储区动态区存储区寄存器局部变量外部变量作用域定义变量的函数或复合语句内本文件其它文件u局部变量默认为auto型uregister型变量个数受限,且不能为long,double,float型u局部static变量具有全局寿命和局部可见性u局部static变量具有可继承性uextern不是变量定义,可扩展外部变量作用域register局部staticauto外部static外部型存储类别第十页,本课件共有16页例 文件file1.cint a;main().f2;.f1;.f1()auto
7、 int b;f2;.f2()static int c;C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:第十一页,本课件共有16页例 auto 变量的作用域main()int x=1;void prt(void);int x=3;prt();printf(“2nd x=%dn”,x);printf(“1st x=%dn”,x);void prt(void)int x=5;printf(“3th x=%dn”,x);运行结果:3th x=52nd x=31st x=1x=1作用域x=1作用域x=3作用域x=5作用域第十二页,本课件共有16页main(
8、)void increment(void);increment();increment();increment();void increment(void)int x=0;x+;printf(“%dn”,x);例 局部静态变量值具有可继承性运行结果:1 1 1main()void increment(void);increment();increment();increment();void increment(void)static int x=0;x+;printf(“%dn”,x);运行结果:1 2 3静态局部变量的初值是在编译时赋予的,在程序执行期间不再赋予初值第十三页,本课件共有16
9、页例 变量的寿命与可见性#include int i=1;main()static int a;register int b=-10;int c=0;printf(-MAIN-n);printf(i:%d a:%d b:%d c:%dn,i,a,b,c);c=c+8;other();printf(-MAIN-n);printf(i:%d a:%d b:%d c:%dn,i,a,b,c);i=i+10;other();other()static int a=2;static int b;int c=10;a=a+2;i=i+32;c=c+5;printf(-OTHER-n);printf(i:%
10、d a:%d b:%d c:%dn,i,a,b,c);b=a;-Main-i:1 a:0 b:-10 c:0-Other-i:33 a:4 b:0 c:15-Main-i:33 a:0 b:-10 c:8-Other-i:75 a:6 b:4 c:15全局i1main:a0b:-10registermain:c0静态存储区动态存储区other:a2other:b0other:c10843315443other:c10675156第十四页,本课件共有16页main()void gx(),gy();extern int x,y;printf(“1:x=%dty=%dn”,x,y);y=246;gx
11、();gy();void gx()extern int x,y;x=135;printf(“2:x=%dty=%dn”,x,y);int x,y;void gy()printf(“3:x=%dty=%dn”,x,y);例 用extern扩展外部变量作用域运行结果:1:x=0 y=02:x=135 y=2463:x=135 y=246第十五页,本课件共有16页例 引用其它文件中的变量,输出ab和a的m次方int a;main()int power(int n);int b=3,c,d,m;printf(Enter the number a and its power:n);scanf(%d,%d,&a,&m);c=a*b;printf(%d*%d=%dn,a,b,c);d=power(m);printf(%d*%d=%d,a,m,d);extern int a;int power(int n)int i,y=1;for(i=1;i=n;i+)y*=a;return(y);第十六页,本课件共有16页