- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
变量的作用域及存储类型
* * §局部变量与全局变量 一、局部变量 下列变量是局部变量 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、变量的划分 ①按作用域: 局部变量:自动,静态局部、寄存器变量、形参 全局变量: ②生存期划分: 动态存储:自动变量、寄存器变量、形参 动态存储:静态局部变量、全局变量 ③存储位置:动态存储区、动态存储区、寄存器
文档评论(0)