全局变量

✍ dations ◷ 2025-10-21 18:54:34 #全局变量

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

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

相关

  • 伊本·泰米伊哈伊本·泰米叶(Taqī ad-Dīn Aḥmad ibn Taymiyyah,Arabic:تقي الدين أحمد ابن تيمية)是一个争议性的伊斯兰黄金时代逊尼派神学家、法学家、逻辑学家(英语:Lo
  • 尼古拉·卡诺尼古拉·莱昂纳尔·萨迪·卡诺(Nicolas Léonard Sadi Carnot,1796年6月1日-1832年8月24日),法国物理学家、工程师,常被形容为“热力学之父”。尼古拉·卡诺在1824年6月12日发表了
  • 齿龈齿龈音(舌尖中音)是舌尖音的一种。发音时,舌尖接触牙龈。如现代标准汉语的 d、t、n、l。英语的/t/,/d/塞音是齿龈塞音,但法语、俄语等语言的舌尖塞音会是齿音。得到IPA确认的齿龈
  • 铁拐李铁拐李,亦称李铁拐,相传名为李凝阳或称李洪水,或名李玄,小字拐儿,自号李孔目。(公元前418年-公元前316年)道教八仙之首。传说能够护佑铁匠与乞丐。铁拐李的身世说法传说颇多。鲁迅的
  • 政要世界各地政要感染2019冠状病毒列表:
  • 新城劲爆颁奖礼1996年度新城劲爆颁奖礼
  • 肯·萨拉查肯·萨拉查(Ken Salazar,1955年3月2日-)美国政治人物、农场经营者、以及环境保护主义者,也是第50任美国内政部长。此前他担任科罗拉多州的参议员,隶属民主党籍。萨拉查原先担任科
  • 李东勋李东勋可以指下列人物:
  • 约翰逊冰原岛峰坐标:85°2′S 92°30′W / 85.033°S 92.500°W / -85.033; -92.500约翰逊冰原岛峰(英语:Johnson Nunataks),是南极洲的冰原岛峰,位于埃尔斯沃思地,处于里德岭以西6公里的福特山西
  • 卡里姆·阿迪普拉西托卡里姆·阿迪普拉西托(德语:Karim Adiprasito),德国数学家,主要从事组合数学领域的研究。阿迪普拉西托于2013年毕业于柏林自由大学并获博士学位,其导师是柏林自由大学校长根特·齐格勒(英语:Günter M. Ziegler)。他于2015年起出任耶路撒冷希伯来大学教授,2019年起任哥本哈根大学教授。阿迪普拉西托曾获得过欧洲组合数学奖(英语:European Prize in Combinatorics)(2015年)、数学新视野奖(2019年)、欧洲数学学会奖(2020年)等奖项。