文档详情

变量的作用域及存储类型.ppt

发布:2016-08-17约1.58千字共9页下载文档
文本预览下载声明
* * §局部变量与全局变量 一、局部变量 下列变量是局部变量 1.在一个函数内部定义的变量 2.函数的形式参数 3.在某个复合语句中定义的变量 说明: 1.局部变量只在自己局部范围内有效 2.如果局部变量的范围有重叠,则有效范围小的优先 二、全局变量 在函数之外定义的变量(外部变量)是全局变量。 全局变量的有效范围是从定义的位置开始到源文件的结束 在一个函数中,即可以使用本函数的局部变量,也可以使用有效的全局变量。 说明: 1.利用全局变量可以在各个函数间传递数据 2.尽量少用全局变量 3.如果局部变量与全局变量同名,局部变量优先 /*例 全局变量与局部变量*/ #includestdio.h int a=3,b=5; int max(int a,int b) { int c; c=ab?a:b; return c; } void main() { int a=8; printf(%d\n,max(a,b)); } § 变量的存储类别 一、变量的动态存储与静态存储 全局变量与局部变量 变量的作用域 静态存储变量与动态存储变量 变量的存储类别,即生存期 内存中供用户使用的区域包括 ①程序区 ②静态存储区:编译时分配空间 ③动态存储区:执行时分配空间 变量的属性 变量的类型 变量的存储类别: 自动型:auto 静态型:static 寄存器型:register 外部型:extern 二、局部变量的存储类别 1、自动变量 存储在动态存储区,用auto说明 如: int func1(int a) {auto int b,c=3; …… } 形参a,变量b,c都是auto型变量 调用该函数时,系统给它们分配空间,调用结束时,自动释放空间 通常将auto省略 二、局部变量的存储类别 2、局部静态变量 存储在静态存储区,用static说明 说明: ①静态局部变量在整个程序的运行期间都不释放空间 ②局部静态变量在编译时赋初值(仅赋一次) ③如果在定义时没有赋初值,编译时会自动赋初值0 ④局部静态变量只能在定义它的函数内使用(它存在,但不能被其他函数引用) 例 :打印1到5的阶乘。 #includestdio.h float fac(int n) { static float f=1; f=f*n; return f; } void main() { int j; for(j=1;j=5;j++) printf(%d!=%.0f\n, j,fac(j)); } 1!=1 2!=2 3!=6 4!=24 5!=120 1、自动变量 2、局部静态变量 3、寄存器变量 存储在寄存器中,用register说明 说明: ①计算机中寄存器个数是有限的 ②寄存器变量对寄存器的占用是动态的 三、全局变量的存储类别 1、全局变量都是静态的 2、用extern说明一个在其他源文件中或在其后定义的全局变量 3、用static说明一个不能在其他源文件中引用的全局变量 尽量少用全局变量 四、存储类别小结 1、变量的定义方法 [存储类别] 变量类型 变量名; 2、变量的划分 ①按作用域: 局部变量:自动,静态局部、寄存器变量、形参 全局变量: ②生存期划分: 动态存储:自动变量、寄存器变量、形参 动态存储:静态局部变量、全局变量 ③存储位置:动态存储区、动态存储区、寄存器
显示全部
相似文档