静态变量

✍ dations ◷ 2025-11-19 20:05:03 #计算机编程,计算机科学,程序架构

静态变量(英语: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++中,带有含私有静态内部变量的类的程序如下所示:

相关

  • 哈佛医学院坐标:42°20′09″N 71°06′18″W / 42.335743°N 71.105138°W / 42.335743; -71.105138哈佛医学院 (英语:Harvard Medical School,简称:HMS) 位于波士顿长木医学区,提供各个医
  • 高光谱影像高光谱影像(hyperspectral imaging)是收集及处理整个跨电磁波谱的信息。不像是人类的眼睛,只能接触到可见光。而高光谱的接触机制、比如虾蛄的眼睛它的光谱能够接触到红外线
  • 鳍脚目鳍足类(学名:Pinnipedia),是分类为鳍足亚目、鳍脚亚目或鳍足目的动物。“鳍足”是源自拉丁文,意思是“长着像鳍一样的脚”。这一类的动物身体成纺锤形,四肢为鳍状,高度适应水中的生
  • 徐闻县徐闻县(邮政式拼音:Tsuimen、Suwen)是中国广东省湛江市下辖的一个县,位于广东省西南部、雷州半岛南端,同时也是中国大陆的最南端所在处。徐闻县下辖1个街道、12个镇、2个乡、5个
  • 张泉灵张泉灵(1973年6月8日-),祖籍浙江宁波,出生于上海市,毕业于北京大学德语文学系,曾任中国中央电视台新闻中心记者、节目主持人,目前担任傅盛战队顾问,紫牛基金合伙人。1996年,张泉灵毕业
  • 厉良玉厉良玉(1865年-1940年),字韫山,杭州人,清朝官员,晚清知名篆刻家、书画家,别署樊榭(厉鹗)后人。据《广印人传》与《中国美术家人名辞典》载,厉良玉,字韫山,又作蕴山、蕴珊、韵珊,别署樊榭后
  • 参数所指定的目标页面不存在,建议更正成存在页面或直接建立下列一个页面(建立前请先搜寻是否有合适的存在页面可以取代):韩国茶文化泛指韩国的制茶、饮茶的文化。韩国的茶叶最初
  • 美国司法部长美国司法部长(英语:United States Attorney General),或称美国总法务官,是美国司法部的首长,被认为是美国政府的首席法律顾问,职责是替美国政府处理法律事务及对美国法务部门进行监
  • 清舌唇塞音清舌唇塞音是一种存在于某些语言中的辅音。在国际音标中,以 ⟨t̼⟩ 或 ⟨p̺⟩ 表示。音讯: 点击这里特点:当符号成对出现时,左边的是清音,右边的是浊音。阴影区域表示被认为
  • 约制实证主义 · 反实证主义(英语:Antipositivism) 结构主义 · 冲突理论 中层理论 · 形式理论 批判理论 人口 · 团体 · 组织(英语:Organizational theory) · 社会化 社会性