静态变量

✍ dations ◷ 2025-11-09 15:21:06 #计算机编程,计算机科学,程序架构

静态变量(英语:Static Variable)在计算机编程领域指在程序执行前系统就为之静态分配(英语:Static memory allocation)(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。

“静态变量”这一术语有两个容易混淆的定义:

而在以Pascal为代表的许多程序语言中,所有局部变量都由系统自动分配存储空间,而所有全局变量的存储空间则以静态分配的方式获取(对应“静态变量”),因此由于实际上“局部变量”和“全局变量”这两个术语已足以涵盖所有的情况,在这些程序语言中通常不使用“静态变量”这一术语,而直接以“全局变量”代之。一般来说,在这些程序语言中,静态变量就是全局变量,而即使在有明确区分全局和静态变量的程序语言中,在编译后的代码里二者也以相同的方式获取存储空间。而今术语“静态变量”的概念则主要基于C族语言的“static”的定义(即定义2)。

静态变量也可以用于存储常数。具体来说,静态变量(全局变量及汇编语言里定义的符号亦同)可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。

在C语言及由其派生出的C++与Objective-C等程序语言中,“static”是用于控制变量的生命周期和连接方式(即其作用域,亦即可见性)的保留字。确切来说,正如C族语言中的extern,auto与register这些保留字一样,static也是一种存储类(此处的“类”与面向对象语言的“类”的定义不同)标识。每个变量与函数都有以上的一种存储类标识,如果在声明(英语:Declaration (computer programming))中没有明确标识其存储类,编译时就会根据上下文来选择其默认存储类,如在源文件里的所有文件级变量对应的默认存储类是extern,而在函数体内的变量对应的则是auto,各存储类的属性如下表所列。

易见存储类为extern的变量(包括上面提到的未明确声明存储类的文件级变量)符合前段所述静态变量的定义1,但不符合定义2。

除明确标识出变量的生命周期(英语:Object lifetime)外,将变量声明为static存储类还会根据变量属性不同而有一些特殊的作用:

在C语言中,带有静态变量的程序如下所示:

#include <stdio.h>void func() {	static int x = 0; // 在对func的三次调用中,x只进行一次初始化	printf("%d\n", x); // 输出x的值	x = x + 1;}int main(int argc, char * const argv) {	func(); // 输出0	func(); // 输出1	func(); // 输出2	return 0;}

C++示例

在C++中,带有含私有静态内部变量的类的程序如下所示:

相关

  • 罗萨林·耶洛罗莎琳·萨斯曼·耶洛(英语:Rosalyn Sussman Yalow,1921年7月19日-2011年5月30日),美国医学物理学家,因开发多肽类激素的放射免疫分析法,而与罗歇·吉耶曼和安德鲁·沙利共同获得197
  • 刺尾鱼毒素刺尾鱼毒素(英语:Maitotoxin,简称MTX)是一种由甲藻门中的岗比甲藻(Gambierdiscus toxicus)产生的剧毒物质。这种化合物是目前人类发现的毒性最强的非蛋白质类毒素:对小鼠的LD50仅为
  • 购买力平价国内生产总值这是按照各国国内生产总值(GDP)排序的列表。页面上提供的美元估算的国内生产总值,都根据购买力平价(PPP)的计算产生。因各机构统计模型不同,所以得出的数据与排名也略有差异。当比
  • span class=chemf style=white-space:nowrap;Csub7/subH庚烷的化学式为C7H16,烷烃中的第七个成员。有9种同分异构体,若考虑到光学异构则有11种同分异构体:其中大多数存于石油的汽油馏出物中。其直链化合物是正庚烷CH3(CH2)5CH3(沸点98
  • 龙王鲸龙王鲸(学名:Basilosaurus,意为“帝王蜥蜴”),又名械齿鲸(Zeuglodon),已经绝种的古代海洋哺乳动物,现代鲸鱼的近亲,是鲸下目中的一个属,生存于4,000万至3,500万年前的始新世晚期。龙
  • 四氟硼酸二茂铁四氟硼酸二茂铁是一种有机金属化合物,化学式为BF4。这种盐由+阳离子和氟硼酸根阴离子(BF4-)组成。性质类似的六氟磷酸盐也是一种受欢迎的试剂。阳离子往往缩写成Fc+或(Cp2Fe)+
  • 单倍群在分子演化的研究中,单倍群(Haplogroup)是一组类似的单倍型(英语:Haplotype)(Haplotype),它们有一个共同的单核苷酸多态性祖先。因为单倍群由相似的单倍型组成,所以可以从单倍型来预测
  • 迈克尔·阿蒂亚迈克尔·弗朗西斯·阿蒂亚爵士,OM,FRS(英语:Sir Michael Francis Atiyah,1929年4月22日-2019年1月11日),英国黎巴嫩裔数学家,主要研究领域为几何,被誉为当代最伟大的数学家之一。阿蒂
  • 埃伦费斯特定理在量子力学里,埃伦费斯特定理(Ehrenfest theorem)表明,量子算符的期望值对于时间的导数,跟这量子算符与哈密顿算符的对易算符,两者之间的关系,以方程表达为其中,
  • 西哈萨克斯坦州西哈萨克斯坦州(哈萨克语:Батыс Қазақстан облысы)是哈萨克斯坦的一个州份,位于欧洲。北为俄罗斯,乌拉尔河在中部流过。面积151,300平方公里。人口606,700(20