全局变量

✍ dations ◷ 2025-07-21 00:24:15 #全局变量

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

通常,使用不必要的全局变量被认为是坏习惯,这正是由于全局变量的非局部性:全局变量可能被从任何地方修改(除非位于保护内存中),也可能被任何地方所依赖。于是全局变量便拥有了创建相互依存关系的无限可能,而互相依存关系的创建会使得复杂度增加,参见远隔作用(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语言中所谓“全局变量”的例子:

相关

  • 弗里德曼温迪·劳雷尔·弗里德曼(英语:Wendy Laurel Freedman,1957年7月17日-),加拿大-美国天文学家,加利福尼亚州帕萨迪纳和智利拉斯坎帕纳斯卡内基天文台的主任,最知名于对哈勃常数的测量
  • 特拉比松特拉比松帝国(希腊语:Αυτοκρατορία της Τραπεζούντας;格鲁吉亚语:ტრაპიზონის იმპერია)创立于1204年4月,是从拜占庭帝国分裂出的三个
  • 穆罕默德·塞利姆王子穆罕默德·塞利姆王子(奥斯曼土耳其语:شہزادہ محمد سلیم ‎,土耳其语:Mehmed Selim Efendi,英语:Şehzade Mehmed Selim;1870年1月11日-1937年5月5日),是奥斯曼帝国苏丹
  • 穆希公爵穆希公爵(duke of Mouchy) 是一个法国贵族头衔,诺瓦耶公爵家族的一个分支。菲利普·德·诺瓦耶(1715–1794)是诺瓦耶公爵家族成员,原为诺瓦耶伯爵(comte de Noailles),他是第四代诺
  • 阪急电车《阪急电车》(日语:阪急電車)是日本小说家有川浩撰写的短篇小说集,插画由徒花Sukumo所绘。日文版单行本由幻冬舍发行,文库本则由幻冬舍文库发行;繁体中文版由时报文化代理出版;简体
  • 新加坡国际电影节新加坡国际电影节(英语:Singapore International Film Festival)是每年于新加坡举办的一个电影节,1987年由杰弗里·马龙、L·勒兰·惠特尼创办,最初的宗旨是为了给新加坡电影提供
  • 泰达控股天津泰达投资控股有限公司,简称泰达控股,成立于1984年12月,是中国天津滨海新区的一个主营区域开发与房地产、公用事业、制造业、金融和现代服务业的大型国有公司。泰达控股的唯
  • 科尔斯顿冰川科尔斯顿冰川是南极洲的高原,位于维多利亚地的博克格雷温克海岸,流经制图师山脉,最终在胜利山脉拜帕斯山以西19公里注入特拉法尔加冰川。坐标:72°25′S 167°58′E / 72.417°S
  • 浙江乌岩岭国家级自然保护区坐标:27°42′20″N 119°40′31″E / 27.705668°N 119.67523°E / 27.705668; 119.67523浙江乌岩岭国家级自然保护区位于中国浙江省温州市泰顺县西北部,浙南沿海山地,与福建
  • 卡斯克峰坐标:42°41′17″N 0°1′36″E / 42.68806°N 0.02667°E / 42.68806; 0.02667卡斯克峰(西班牙语:Pico Casco de Marboré),是欧洲的山峰,位于法国西南部上比利牛斯省和西班牙北