问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

静态变量和局部变量和全局变量的区别

发布网友 发布时间:2022-04-28 16:19

我来回答

1个回答

热心网友 时间:2022-06-19 16:26

1.从作用域看:
C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:
全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
3>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
4>静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
2.从分配内存空间看:
1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间
2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则*了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
1)全局变量、静态全局变量以及静态局部变量都会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它们与堆变量、堆变量的区别。
2)静态变量(包括静态局部变量和静态全局变量)用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,*了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。
Tips:
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
交通事故致人死亡,该如何处理? 爱普生LQ1600KIIIH 断色带 爱普生针式打印机LQ1600KⅢH近两月来总频繁中断打印,同时电脑显示是通讯... ACQUA DI PARMA 帕尔玛之水 蓝色地中海系列 桃金娘加州桂中性淡香水 E... 女士香水推荐-ACQUA DI PARMA 帕尔玛之水 优雅木兰女士浓香水 EDP 50... ACQUA DI PARMA帕尔玛之水克罗尼亚系列中性香水套装-适用对象 帕尔玛 | 必须拥有的小众沙龙香 ACQUA DI PARMA/帕尔玛之水克罗尼亚系列黑调男士古龙水-适用对象 ACQUA DI PARMA 帕尔玛之水 克罗尼亚系列 风度中性古龙水 EDC 20ml... ACQUA DI PARMA/帕尔玛之水-绅士男士古龙水EDC java中全局变量跟局部变量是什么意思,他们有什么区别 C语言中的,全局变量与局部变量的区别? 全局变量和局部变量有什么区别 全局变量和局部变量的区别?请举个例子 C语言,全局变量和局部变量有什么区别 全局变量和局部变量有什么区别?是怎么实现的 慢性支气管自己怎么调理 慢性支气管炎怎么治,怎么调理好 局部变量和全局变量的区别是什么? 慢性支气管炎如何才能根治 慢性支气管炎怎么治疗,怎么调理 慢性支气管炎怎么调理比较好 请问一下艾灸有什么好处啊? 慢性支气管炎怎么调理? 慢性支气管炎如何调理? 艾灸慢性支气管炎。 会出现什么排病反应。 支气管炎发,可以艾灸吗 华为手机截长屏怎么办 华为Nova4不能长截屏怎么回事?工具栏的截屏点一下默认只能截一面,没有其他选项 华为荣耀9plus滚动截屏的时候只能自己滚一点点,截不了更长一点... 全局变量与局部变量有什么区别,怎么实现 全局变量和局部变量在内存中的区别是什么 协同办公平台上传照片传不了 Easy connect软件oa办公系统怎么发文件 oa系统无法上传附件? 安全资料上传OA怎么弄 微信的文件怎么传到OA上 oa上传文件如何打开正文编辑 怎么发文件到OA 通达OA客户管理怎么上传资料啊 OA系统上传文件问题? 公司OA办公系统上传不了附件,还会显示请上传本地文件。怎么办? 办公OA总是无法上传文件,怎么办啊,还总是显示这样的提示,我上传的是一般的文件呢,求高手指点。 oa系统如何发布文件 oa系统上传文件,最大限度是50mb,最近电脑出现问题,每次传到512kb就不传了,不知道怎么解决 如何在OA中修改上传附件文件大小的限制 小米 2A线刷提示“刷机出现未指定的错误(0x80004005)”怎么办? 如何在ipad上安装dmg文件 iwork的格式是dmg,我的ipad如何安装?(已越狱) 网盘内如何打开dmg软件