全局变量

✍ dations ◷ 2025-05-20 14:25:06 #全局变量

在程序设计中,全局变量是在所有作用域都可访问的变量,与之对应的是局部变量。

通常,使用不必要的全局变量被认为是坏习惯,这正是由于全局变量的非局部性:全局变量可能被从任何地方修改(除非位于保护内存中),也可能被任何地方所依赖。于是全局变量便拥有了创建相互依存关系的无限可能,而互相依存关系的创建会使得复杂度增加,参见远隔作用(Action at distance)。然而,在少数情况下是适合使用全局变量的。例如,可以通过全局变量的使用来避免常用变量在一系列函数间的频繁传递。

C++语言中全局变量的例子:

#include <cstdio>int global = 3; // 定义全局变量 globalstatic void ChangeGlobal(void){   global = 5; // 从函数中引用全局变量}int main(void){   std::printf("%dn", global); // 还是从函数中引用全局变量   ChangeGlobal();   std::printf("%dn", global);}

因为变量是全局的,所以就没有必要为了在 main 以外的函数中使用而作为参数传递。全局变量属于程序中的所有函数。

输出应该是:

35

全局变量的使用使得软件更加难以阅读和理解。因为程序中任何地方的代码都可能随时修改这个变量的值,于是理解这个变量可能就意味着要理解整个程序的很大部分。

某些语言(比如C#和Java)中没有全局变量。Java 中,所有非局部变量都是类的字段,于是所有变量就都在类和方法的作用域中了。

需要指出的是,C语言不存在真正意义上的“全局变量”。被习惯性误称为“全局变量”的,一般是文件作用域对象。ANSI C/ISO C也没有这种提法。C语言中所谓“全局变量”的例子:

相关

  • α射线α粒子是一种放射性粒子,由两个质子及两个中子组成,并不带任何电子,亦即等同于氦-4的原子核,或电离化后的氦-4,He2+。通常具有放射性而原子量较大的化学元素,会透过α衰变放射出α
  • 类人猿人格类人猿人格权运动是一项旨在向人科的非人类成员(倭黑猩猩、黑猩猩、大猩猩、红毛猩猩)提供在法律上“人”的地位,并基于此对这些动物进行合法保护的运动。支持者包括灵长类动物
  • 斯普特尼克1号斯普特尼克1号,又译1号卫星(俄语:Спутник,俄语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode
  • 吴江博物馆吴江博物馆是展现吴江文化的一个重要的博物馆。位处苏州市吴江区区江陵南路,于1988年10月兴建,历时12年至2000年6月竣工。同年7月1日正式对外开放。馆内收藏的各种出土陶瓷、
  • 信用评分系统信用评分系统(Credit Scoring System),指根据借款方的借款与还债历史、债务状况等信息给予不同的分数,用来决定是否核准新贷款或信用额度的统计与评估系统。信用评分可以由提供
  • 雅迪楚里峰雅迪楚里峰是尼泊尔的山峰,位于喜马拉雅山脉,海拔高度7871米,是全球第二十高山峰,波兰攀山队在1979年5月8日首次登上该山峰。
  • 施科德兰·穆斯塔菲 施科德兰·穆斯塔菲(德语:Shkodran Mustafi,1992年4月17日-),是一名阿尔巴尼亚裔的德国职业足球运动员,现时效力于英格兰足球超级联赛球队阿森纳和德国国家足球队的成员。司职
  • 表面张力波表面张力波(capillary wave)是延著液体相边界(英语:phase boundary)行进的波,其动力学及相速度是由表面张力的效应所决定,在水面上的表面张力波常称为涟漪。表面张力波是自然界常见
  • 中国 (杂志)俄文《中国》杂志(俄语:Журнал Китай)是中国第一本国家级俄语综合性月刊,创刊于2005年,前身是创办于1951年的《中国画报》俄文版。俄文《中国》杂志由中国外文出版发
  • MySQL ABMySQL AB创立于1995年,从事制造及拥有关联式数据库管理系统MySQL以及相关的产品,如MySQL Cluster,是全球最大的开放源码公司。公司行双总部制,一设于瑞典乌普萨拉(瑞典语:Uppsala),