- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
局部变量与全局变量 函数的形参变量只在被调用期间才分配内存单元,调用结束立即释放。 ↓这一点表明形参变量只有在函数内才是有效的, 离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量, C语言中所有的量都有自己的作用域。 ↓变量说明的方式不同,其作用域也不同。 ↓C语言中的变量,按作用域范围可分为两种, 局部变量 全局变量 局部变量 局部变量也称为内部变量。 局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。 在函数f1内定义了三个变量,a为形参,b,c为一般变量。 在 f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内。 同理,x,y,z的作用域限于f2内。 a,n作用域限于main函数内。 关于局部变量的作用域还要说明以下几点: 1. 主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。 2. 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。 例如,右边的形参变量x属于f2被调函数,实参变量n是属于main主调函数。 关于局部变量的作用域还要说明以下几点: 3. 注意在复合语句中定义的变量的作用域。如右侧例子中的b变量。 4.注意相同变量名的变量的作用域。 #include stdio.h void main( ){ int i=2,j=3,k; k=i+j; { int k=8; if(j==3) printf(%d\n, k); } printf(%d\n%d\n, i, k);} 本程序在main中定义了i,j,k三个变量,其中k未赋初值。 而在复合语句内又定义了一个变量k,并赋初值为8。应该注意这两个k不是同一个变量。 程序输出结果为:8 2 5 在复合语句外由main定义的k起作用,而在复合语句内则由在复合语句内定义的k起作用。因此程序第4行的k为main所定义,其值应为5。第7行输出k值,该行在复合语句内,由复合语句内定义的k起作用,其初值为8,故输出值为8,第9行输出i,k值。i是在整个程序中有效的,第7行对i赋值为3,故以输出也为3。而第9行已在复合语句之外,输出的k应为main所定义的k,此k值由第4 行已获得为5,故输出也为5。 全局变量 全局变量是在函数外部定义的变量。 全局变量不属于哪一个函数,它属于一个源程序文件。其作用域是从定义位置到源文件结束的地方。 例如:#include stdio.hint a, b; /*全局变量*/void f1( ) /*函数f1*/{ ……}float x, y; /*全局变量*/ int fz( ) /*函数fz*/{……} void main( ) /*主函数*/{……} 从左例可以看出a、b、x、y 都是在函数外部定义的全局变量,但x、y 定义在函数f1之后(而在f1内又没有对x、y采用引用说明来延伸其作用域(详细解释见外部变量)),所以x、y在f1内无效。 a、b定义在源程序最前面,因此在f1、f2及main内均可使用。 例、输入正方体的长l、宽w、高h,求体积及三个面 x*y、 x*z、 y*z 的面积。 #include stdio.hint s1,s2,s3;int vs( int a,int b,int c){ int v; v=a*b*c; s1=a*b; s2=b*c; s3=a*c; return v;}void main( ){ int v, l, w, h; printf(\ninput length, width and height\n); scanf(%d%d%d,l,w,h); v=vs(l,w,h); pr
原创力文档


文档评论(0)