变量的作用域与生存期.ppt_第1页
变量的作用域与生存期.ppt_第2页
变量的作用域与生存期.ppt_第3页
变量的作用域与生存期.ppt_第4页
变量的作用域与生存期.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

变量的作用域与生存期,作用域与生存期概述变量的作用域(空间特性)变量的作用域也称为可见性,指变量能够被访问的范围分为局部变量和全局变量两类:局部变量的范围较窄,限定在程序中的部分区域;全局变量的范围较宽,可以是整个文件甚至是整个程序变量的存储类别(时间特性)除作用域(可见性)外的另外两个特性:变量存放在计算机何处,变量何时存在存储类别变量存在的位置:RAM或CPU寄存器RAM划分:代码区、静态存储区、动态存储区存储类别:RAM:static、auto,CPU:register,内部变量局部变量-内部变量定义:在函数内或复合语句内定义,只在本函数内或复合语句内有效说明:main中定义的变量只在main中有效不同函数中同名变量,占不同内存单元形参属于局部变量可定义在复合语句中有效的变量局部(空间特性)变量可用存储类型(时间特性):autoregisterstatic(默认为auto,可省略),voidsub()inta,b;a=6;b=7;printf(sub:a=%d,b=%dn,a,b);voidmain()inta,b;a=3;b=4;printf(main:a=%d,b=%dn,a,b);sub();printf(main:a=%d,b=%dn,a,b);,#defineN5voidmain()inti;intaN=1,2,3,4,5;for(i=0;iN/2;i+)inttemp;temp=ai;ai=aN-i-1;aN-i-1=temp;for(i=0;iN;i+)printf(%d,ai);,例不同函数中同名变量,例复合语句中变量,运行结果:54321,运行结果:main:a=3,b=4sub:a=6,b=7main:a=3,b=4,自动变量(auto)格式:auto类型变量名列表;auto可省略autointa;等价于inta;自动变量的生存期:自动变量存在于RAM中的动态存储区“栈”,并且仅当定义它的函数或复合语句被执行时,才创建该变量,执行结束后该变量自动被删除掉,释放占用的内存空间。自动变量用的最多,不会永久占用内存空间。,寄存器变量格式:register类型变量名列表;for(registerinta=0;a1000000;a+)寄存器变量存在于cpu内部的寄存器中,数量很少,一般是将循环使用很多次的变量放在寄存器中,加快执行速度。注意:只有整型变量能放在寄存器中,包括:int、char、short、long等。寄存器变量必须是auto类型的局部变量、形参,不能是全局变量或静态变量。由于寄存器数量很少,不能保证定义的寄存器变量总是能分配到寄存器,这时作为普通变量。对于寄存器变量,不能做取地址(for(i=1;i=n;i+)f=f*i;return(f);voidmain()inti;for(i=1;i=1000;i+)printf(“%d!=%dn”,i,fac(i);,1、只有局部自动变量和形式参数可以作为寄存器变量2、不能定义任意多个寄存器变量3、局部静态变量不能定义为寄存器变量,静态内部变量格式:static类型变量名列表;staticinta;形参不能是定义成static。内部变量定义成static后,作用域不变,但生存期变长,在整个程序执行前就存在,直到程序结束才清除掉,其生存期为整个程序的运行期。使用注意:静态变量只初始化一次。静态变量的值具有“记忆”性。尽管生存期变长,但作用域(可见性)仍然局限在定义它的局部范围内。,voidmain()inti;for(i=0;i3;i+)inc1();for(i=0;ib?a:b;return(c);voidmain()inta=8;printf(max=%d,max(a,b);,例外部变量与局部变量(同名的局部变量屏蔽外部变量),运行结果:max=8,floatmax,min;floataverage(floatarray,intn)inti;floatsum=array0;max=min=array0;for(i=1;imax)max=arrayi;elseif(arrayimin)min=arrayi;sum+=arrayi;return(sum/n);voidmain()inti;floatave,score10;/*Inputdatatoscore省略*/ave=average(score,10);printf(max=%6.2fnmin=%6.2fnaverage=%6.2fn,max,min,ave);,外部变量增加了函数间数据联系的渠道,externcharc1,c2;,externcharc1,c2;,用extern声明外部变量可以扩展外部变量的作用域,intadd(intx,inty)intz;z=x+y;returnz;voidmain()externinta,b;printf(“a+b=%dn,add(a,b);inta=3,b=4;,例用extern扩展外部变量作用域,运行结果:a+b=7,例用extern将变量的作用域扩展到其它文件中,intx=10,y=10;externvoidsub();voidadd(void)inty=5;y=10+x;x*=2;printf(add:y=%d:,y);voidmain()x+=5;add();sub();printf(main:x=%d,main:y=%dn,x,y);,externintx;voidsub()inty=5;x-=y;printf(sub:y=%d;,y);,file1.c,file2.c,运行结果:add:y=25;sub:y=5;main:x=25;main:y=10;,staticintx=10;voidadd2()externinty;x+=10;y+=2;printf(inadd2x=%dn,x);,例static型外部变量的作用域受到限制,限制在本文件内使用,运行结果:inadd1x=4inadd2x=20inadd1x=6inadd2x=30 x=6;y=13,staticintx=2;inty=3;externvoidadd2();voidadd1();voidmain()add1();add2();add1();add2();printf(x=%d;y=%dn,x,y);voidadd1()x+=2;y+=3;printf(inaddax=%dn,x);,inti;voidmain()voidprt();for(i=0;i5;i+)prt();voidprt()for(i=0;i5;i+)printf(“%c”,*);printf(“n”);,例外部变量副作用,运行结果:*,例文件file1.cinta;voidmain().f2;.f1;.f1()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论