欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > PPT文档下载
 

C语言中用户标示符的作用域和存储类.ppt

  • 资源ID:12805497       资源大小:2.26MB        全文页数:20页
  • 资源格式: PPT        下载积分:9.9积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要9.9积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

C语言中用户标示符的作用域和存储类.ppt

第12章C语言中用户标识符的作用域和存储类,第12章C语言中用户标识符的作用域和存储类,局部变量全局变量和存储分类用户标识符的作用域局部变量全局变量和存储分类局部变量及其作用域和生存期auto变量、register变量、静态存储类的局部变量全局变量及其作用域和生存期函数的存储分类用extern说明函数用static说明函数,局部变量全局变量和存储分类,局部变量全局变量和存储分类,局部变量及其作用域和生存期,例如,floata;就等价于:autofloata;auto变量的存储单元被分配在内存的动态存储区每当进入函数体(或复合语句)时,系统自动为auto变量分配存储单元;退出时自动释放这些存储单元另作他用auto变量的作用域是从定义的位置起,到函数体(或复合语句)结束为止,局部变量及其作用域和生存期,例如,voidsub(floata)inti;if(i>0)intn;printf(%dn,n);,所有自动局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失这就是自动类局部变量的“生存期”当再次进入函数体(或复合语句)时,系统将为它们另行分配存储单元,因此变量的值不可能被保留若通过定义语句给自动变量赋初值,赋初值的操作是在程序运行过程中进行的,每进入一次函数体(或复合语句),就赋一次初值,局部变量及其作用域和生存期,局部变量及其作用域和生存期,#includeintpower(int,registerint);main()ints;s=power(5,3);printf(%dn,s);intpower(intx,registerintn)registerintp;for(p=1;n;n-)p=p*x;returnp;,局部变量及其作用域和生存期,说明,1)CPU中寄存器的数目是有限的,因此只能说明少量的寄存器变量2)由于register变量的值是放在寄存器内而不是放在内存中,所以register变量没有地址,也就不能对它进行求地址运算3)register变量的说明应尽量靠近其使用的地方,用完之后尽快释放,以便提高寄存器的利用效率这可以通过把对register变量的说明和使用放在复合语句中来实现,全局变量及其作用域和生存期,全局变量可使用extern和static两种说明符,全局变量的作用域和生存期,voidfun1(void);voidfun2(void);intsum;/*定义全局变量*/main()sum+;voidfun1(void)sum+;inttest;/*定义全局变量*/voidfun2(void)sum+;test=1;,全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止,sum是在整个源程序的开始定义的,它的作用域是整个程序test是在函数fun2前定义的,它的作用域从定义处开始直到程序结束。全局变量的使用相当于为函数之间的数据传递另外开辟了一条通道全局变量的生存期是整个程序的运行期间若全局变量和某个函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系,例如,全局变量的作用域和生存期,#includeintsum;/*定义全局变量*/voidfun(void);main()sum=10;printf(*main(1)*:%dn,sum);fun();printf(*main(2)*:%dn,sum);voidfun(void)intsum;/*定义同名局部变量*/sum=20;printf(*fun*:%dn,sum);,全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止,*main(1)*:10*fun*:20*main(2)*:10即全局变量sum的作用域是除函数fun以外的整个程序;局部变量sum的作用域仅是函数fun内部,结果,全局变量的作用域和生存期,全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止,除十分必要外,一般不提倡使用全局变量,原因主要有以下三个方面:1)不论是否需要,全局变量在整个程序运行期间都占用内存空间2)全局变量必须在函数以外定义,降低了函数的通用性,影响了函数的独立性3)使用全局变量容易因疏忽或使用不当而导致全局变量中的值意外改变,从而引起副作用,产生难以查找的错误,说明,在同一编译单位内用extern说明符扩展全局变量的作用域,当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存储单元,不需再为它另外开辟存储单元这时其作用域从extern说明处起,延伸到该函数末尾,全局变量的说明与全局变量的定义不同:变量的定义只能出现一次,在定义全局变量时,不可使用extern说明符;而对全局变量的说明,则可以多次出现在需要的地方,这时必须用extern进行说明,注意,在不同编译单位内用extern说明符扩展全局变量的作用域,每个可进行单独编译的源文件称为“编译单位”当一个程序由多个编译单位组成,并且在每个文件中均需要引用同一个全局变量,这时若在每个文件中都定义了一个所需的同名全局变量,则在“连接”时将会产生“重复定义”错误解决的办法通常是:在其中一个文件中定义所有全局变量,而在其他用到这些全局变量的文件中用extern对这些变量进行说明,声明这些变量已在其他编译单位中定义,通知编译程序不必再为它们开辟存储单元,在不同编译单位内用extern说明符扩展全局变量的作用域,/*file1.c文件*/*file2.c文件*/#include#includeintx,y;/*定义全局变量*/externintx;/*说明全局变量*/voidfun1();voidfun2()voidfun2();printf(%dn,x);/*输出结果为111*/voidfun3();main()fun1();voidfun3()fun2();x+;fun3();printf(%dn,x);/*输出结果为112*/voidfun1()x=111;,程序在不同的编译单位内引用了全局变量x,即在文件file2.c中使用了文件file1.c中定义的全局变量由于在file2.c中,说明语句externintx;放在了文件开始,所以变量x的作用域包含了file2.c整个文件若将这一说明改放在函数fun2内,变量x的作用域就只从说明的位置起延伸到函数fun2的末尾也就是说,在函数fun3中将不能引用全局变量x了,静态全局变量,当用static说明符说明全局变量时,此变量可称作“静态”全局变量静态全局变量只限于本编译单位使用,不能被其他编译单位所引用,例12.4读程序,分析程序的错误。,/*file1.c文件*/*file2.c文件*/#include#includestaticintn;externintn;voidfunc();voidfunc()main()printf(file2:%dn,n);n=5;printf(file1:%dn,n);func();,函数的存储分类,所有函数都是外部的,因为不允许在函数内部定义另一个函数但当定义函数时,可以使用extern或static说明符,函数的存储分类,所有函数都是外部的,因为不允许在函数内部定义另一个函数但当定义函数时,可以使用extern或static说明符,

注意事项

本文(C语言中用户标示符的作用域和存储类.ppt)为本站会员(tia****nde)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!