首页 第12章局部变量与全局变量

第12章局部变量与全局变量

举报
开通vip

第12章局部变量与全局变量第12章C语言中用户标识符的作用域和存储类局部变量和全局变量及其作用域局部变量---内部变量定义:在函数内定义,只在本函数内有效说明:main中定义的变量只在main中有效不同函数中同名变量,占不同内存单元形参属于局部变量定义在复合语句中的变量只在复合语句中有效全局变量---外部变量定义:在函数外定义,可为本文件所有函数共用有效范围:从定义变量的位置开始到本源文件结束若外部变量与局部变量同名,则外部变量被屏蔽通常情况下,外部变量名的第一个字母用大写的形式floatmax,min;floataverage(float...

第12章局部变量与全局变量
第12章C语言中用户标识符的作用域和存储类局部变量和全局变量及其作用域局部变量---内部变量定义:在函数内定义,只在本函数内有效说明:main中定义的变量只在main中有效不同函数中同名变量,占不同内存单元形参属于局部变量定义在复合语句中的变量只在复合语句中有效全局变量---外部变量定义:在函数外定义,可为本文件所有函数共用有效范围:从定义变量的位置开始到本源文件结束若外部变量与局部变量同名,则外部变量被屏蔽通常情况下,外部变量名的第一个字母用大写的形式floatmax,min;floataverage(floatarray[],intn){inti;floatsum=array[0];max=min=array[0];for(i=1;i<n;i++){if(array[i]>max)max=array[i];elseif(array[i]<min)min=array[i];sum+=array[i];}return(sum/n);}main(){inti;floatave,score[10];/*Input*/ave=average(score,10);printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave);}intp=1,q=5;floatf1(inta){intb,c;…….}intf3(){…..}charc1,c2;charf2(intx,inty){inti,j;……}main(){intm,n;…….}c1,c2;inta=3,b=5;max(inta,intb){intc;c=a>b?a:b;return(c);}main(){inta=8;printf("max=%d",max(a,b));}例外部变量与局部变量运行结果:max=8注:全局变量与局部变量同名时,全局变量被屏蔽变量的存储类别及变量的生存期1.变量的生存期与变量的存储分类变量的生存期:变量在内存中占据存储空间的时间。根据生存期分为静态存储方式和动态存储方式。静态存储方式:程序运行期间分配固定存储空间的方式。全局变量存放在静态存储区中动态存储方式:程序运行期间根据需要动态分配存储空间方式。函数形式参数自动变量函数调用时的现场保护和返回地址用户在内存的存储空间:程序区、静态存储区、动态存储区变量的属性数据类型:决定为变量分配内存单元的长度,数据的存放形式,数的范围。存储类别:决定了变量的生存期,给它分配在哪个存储区。分为四种:auto\static\register\extern变量定义语句的一般形式存储类别数据类型变量名1,…,变量名n;auto(自动的)register(寄存器的)static(静态的)extern(外部的)1.自动变量(auto类别):存储在动态存储区函数内部或复合语句内可以定义为自动变量。例auto变量的作用域main(){intx=1;voidprt(void);{intx=3;prt();printf(“2ndx=%d\n”,x);}printf(“1stx=%d\n”,x);}voidprt(void){intx=5;printf(“3thx=%d\n”,x);}运行结果:3thx=52ndx=31stx=12.寄存器变量(register类别)定义:直接放置在运算器的寄存器中的变量称为寄存器变量,其值保存在CPU的寄存器中。定义形式:在变量名前面加关键字registerregister类型说明符变量名;例如:registerinta;作用:对于使用频繁的变量,定义为寄存器变量,不必从内存而是直接从寄存器中取出参加运算,提高程序执行效率。注意:每个函数中的register变量数目是有限的3.外部变量(extern类别)外部变量只能隐式定义为extern类别,不能显式定义。intc;staticinta;main(){floatx,y;…}chars;f(){staticintb=1;……}intp=1,q=5;floatf1(inta){externcharc1,c2;……}charc1,c2;charf2(intx,inty){……}main(){……}思考:在f1函数中声明c1、c2的作用是什么?如何修改程序使所有函数都可以使用外部变量而又不需要声明?【例】在一个文件内声明外部变量。当全局变量定义在后,引用它的函数在前,应该在引用他的函数内用extern对此全局变量进行说明外部变量声明的一般格式:extern数据类型变量名1,…,变量名n;或extern变量名1,…,变量名n;注意:全局变量的定义只能出现一次,在定义时不能使用extern说明符。全局变量的说明可多次出现在需要的地方,说明时要用extern说明符main(){voidgx(),gy();externintx,y;printf(“1:x=%d\ty=%d\n”,x,y);y=246;gx();gy();}voidgx(){externintx,y;x=135;printf(“2:x=%d\ty=%d\n”,x,y);}intx,y;voidgy(){printf(“3:x=%d\ty=%d\n”,x,y);}例用extern扩展外部变量作用域运行结果:1:x=0y=02:x=135y=2463:x=135y=246注意:应尽量少使用全局变量,因为:全局变量在程序的全部执行过程中占用了存储单元降低了程序的通用性、可靠性和可移植性降低了程序的清晰性,容易出错inti;main(){voidprt();for(i=0;i<5;i++)prt();}voidprt(){for(i=0;i<5;i++)printf("%c",'*');printf("\n");}例外部变量副作用运行结果:*****4.静态变量(static类别)除形参外,局部变量和全局变量都可以定义为静态变量。局部静态变量:函数调用结束后保留原值全局静态变量:变量仅限于本文件引用静态变量静态变量staticinta;main(){floatx,y;…}f(){staticintb=1;……}main(){voidincrement(void);increment();increment();increment();}voidincrement(void){intx=0;x++;printf(“%d\n”,x);}例局部静态变量值具有可继承性运行结果:111main(){voidincrement(void);increment();increment();increment();}voidincrement(void){staticintx=0;x++;printf(“%d\n”,x);}运行结果:123例:引用其它文件中的外部变量static说明:只有局部自动变量或形参可以定义为寄存器变量。受寄存器长度的限制,寄存器变量只能是char、int和指针类型的变量。局部静态变量不能定义为寄存器变量。不能写成:registerstaticinta,b,c;即一个变量只能声明一种存储类别。优化的编译系统可以自动将使用频繁的变量存放在寄存器内变量存储类型小结:局部变量默认为auto型register型变量个数受限,且不能为long,double,float型局部static变量具有全局寿命和局部可见性局部static变量具有可继承性extern不是变量定义,可扩展外部变量作用域例文件file1.cinta;main(){…….…….f2;…….f1;…….}f1(){autointb;………f2;……..}f2(){staticintc;………}上机练习题在主函数中输入8个整数,调用函数对其进行排序(从小到大),排序方法不限,最后在主函数中输出结果用函数实现求3*4的矩阵中最大的元素,然后在主函数中输出结果有两个数组,各有10个元素,编写函数实现求两个数组平均值。然后在主函数中输出两个平均值的差与和。编写函数,将一十进制整数转换为二进制整数,然后在主函数输出结果编写函数求1-1/2+1/3-1/4+1/5-…1/n
本文档为【第12章局部变量与全局变量】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_693555
暂无简介~
格式:ppt
大小:256KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2018-03-10
浏览量:51