欢迎来到天天文库
浏览记录
ID:20606786
大小:117.50 KB
页数:16页
时间:2018-10-14
《c语言全局变量》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、8.8局部变量和全局变量8.8.1局部变量定义:在一个函数内部定义,只在本函数范围有效的变量。floatf1(inta){intb,c;}main(){intm,n;}a、b、c有效m、n有效说明1.主函数中定义的变量也只在主函数中有效。2.不同函数中可以使用相同名称的变量。3.形参也是局部变量。4.复合语句中定义的变量只在本复合语句中有效。main(){inta,b;{intc;c=a+b;}}c有效a、b有效这种复合语句又称为“分程序”或“程序块”。8.8.2全局变量定义:在一个函数之外定义、从定义的位置开始,到源程序的最
2、后都有效的变量,所以也叫外部变量。intp=1,q=5;/*外部变量*/floatf1(inta)/*定义函数f1*/{intb,c;}charc1,c2;/*外部变量*/charf2(intx,inty)/*定义函数f2*/{inti,j;}main()/*主函数*/{intm,n;}全局变量c1、c2的作用范围全局变量p、q的作用范围说明1.全局变量的作用范围不同。如p、q和c1、c2的作用范围不同。2.全局变量增加了函数间数据联系的渠道,可以用全局变量从函数得到一个以上的返回值。3.由于全局变量在程序的全过程都占用内存,
3、并且使函数的通用性和清晰性降低,因此不必要时尽量少用全局变量。4.若在定义点之前的函数想引用该外部变量,则应在该函数中用关键字extern作“外部变量”说明。5.若在同一源文件中外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。求一维数组的平均、最大、最小值。例8.15例8.16例8.178.9动态存储变量和静态存储变量8.9.1变量的存储类别存放全局变量函数形参变量局部变量(即自动变量,未加static说明)函数调用时的现场保护C语言中每个变量和函数都有数据类型和数据的存储类别两个属性。数据类型如整型、字符
4、型等。存储类别指的是数据在内存中存储的方法,包括静态存储类和动态存储类,具体有以下4种:自动的(auto)、静态的(static)、外部的(extern)、寄存器的(register)。8.9.2局部变量的存储方式1.函数中的局部变量若未做专门说明都为动态存储变量,其存储空间的分配与释放由编译系统完成,因此又称为自动变量,用auto作存储类型的说明,它是系统隐含的存储类型,因而auto可省略。2.局部静态变量用static说明,函数调用结束后,所占用的内存单元不被释放。通过[例8.18]可了解其特点。例8.18关于局部静态变量
5、的说明1)局部静态变量属静态存储类别,整个程序运行期间不释放内存;而局部动态变量(auto)在调用结束后立即释放。见上表。2)局部静态变量只在编译时赋一次初值;自动变量则在调用时赋初值。3)若定义时局部变量不赋初值,则:数值型:编译时赋0静态变量字符型:空字符自动变量:值不确定。4)虽然局部静态变量在函数调用结束后仍然存在,但其他函数不能引用!局部静态变量的应用场合1)需要保留函数上一次调用结束时的值。2)同样,局部静态变量不但占用内存,而且降低程序的可读性,因此不必要时应限制使用。打印阶乘。例8.19练习:上述程序的fac函
6、数内,统计此函数被main函数调用了多少次?关于寄存器变量的说明1)只有自动变量和形参可以作寄存器变量。寄存器在函数调用结束时释放。2)寄存器数目受计算机系统限制,因此不能任意多的使用寄存器变量。3)局部静态变量不能定义为寄存器变量。即不能将变量既放在静态存储区中,又放在寄存器中。registerstaticinta,b,c;3.寄存器变量用register说明,它将频繁使用的变量的值放在运算器的寄存器中,避免CPU与内存频繁打交道,其作用是提高程序的执行效率。寄存器变量的使用例8.208.9.3全局变量的存储方式全局变量在函
7、数的外部定义,编译时分配静态存储区,可以为程序中各个函数引用。一个C程序可由多个源程序文件组成,一个文件中的函数引用另一个文件中的全局变量分下列两种情况。1)在需要引用的文件的开头用extern说明。2)定义时加static说明的外部变量只能被本文件中的函数引用,而不能被其他文件引用。这种外部变量称为静态外部变量。注意:外部变量都是静态存储方式,都是在编译时分配内存,只是作用范围不同而已。而不管其是否加static说明。例EP8_21F1.C和EP8_21F2.C8.9.4存储类别小结对一个数据的定义,需要分别用两个关键字来指
8、定两种属性:数据类型和存储类别。如:staticinta;静态内部/外部变量autocharc;自动变量,在函数内定义registerintd;寄存器变量,在函数内定义此外,在对变量作说明时,可以用extern说明某变量为已定义的外部变量,如:externintb;说明b是一
此文档下载收益归作者所有