静态变量

✍ dations ◷ 2025-01-31 14:16:46 #计算机编程,计算机科学,程序架构

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

相关

  • 贴扎贴扎是一种将胶布贴于皮肤以达到增进或保护肌肉骨骼系统的非侵入性治疗。贴扎技术常用于骨骼肌肉系统伤害的处理,目的为固定关节位置及限制软组织的活动以让软组织在稳定的状
  • 环戊五酮环戊五酮也称为“五酮环戊烷”或“白酮酸”,是一种有机碳氧化物,其分子式为C5O5。这种化合物可看作是环戊烷的五羰基取代物或一氧化碳的五聚物。直至2000年,环戊五酮的大量合成
  • 无任所大使无任所大使又称巡回大使,由国家元首或政府首脑或国家其他重要领导人指派、授权代表国家的高级外交官或部长、大臣,不同于一般派驻海外固定国家、单一使馆的大使。无任所大使通
  • 急性肾炎综合征肾炎综合征(英语:Nephritic syndrome),又称肾炎症候群,以血尿、蛋白尿为特征的综合征,常伴随水肿和高血压。可进一步细分为:医学导航:泌尿系统解剖/生理/发育/细胞病理/酸碱/先天/肿瘤、症
  • 下划线؋ ​₳ ​฿ ​₿ ​₵ ​¢ ​₡ ​₢(英语:Brazilian cruzeiro) ​$ ​₫ ​₯ ​֏ ​₠ ​€ ​ƒ(英语:Florin sign) ​₣ ​₲ ​₴(英语:Hryvnia sign) ​₭ ​₺ ​₾ ​₼
  • 阿难陀寺阿难陀寺(英文:Ananda Temple),一译阿难达寺,是一座位于缅甸蒲甘的佛教寺庙。由缅甸蒲甘王国国王江喜陀于公元1105年时兴建,寺名来源自佛陀释迦牟尼十大弟子中的阿难陀,是蒲甘现存
  • 机走线机走线或机回线,全称机车走行线或机车回送线,是指铁路车站或地铁站场内用于机车或客运列车转场或折返的铁道。一些尽头站(例如中国铁路总公司的青岛站与北京站)设置有机走线,供终
  • 复合手术室复合手术室是一个配备了先进的医疗成像设备的洁净手术室:如固定C型臂CT扫描仪或MRI扫描仪。 这些成像设备使介入微创手术成为可能。微创是指外科医生并不需要动刀将病人完全
  • 奥野僚右奥野 僚右(Okuno Ryousuke, 1968年11月13日-),前日本足球运动员。
  • 格拉维纳岛格拉维纳岛是美国的岛屿,位于太平洋海域,属于格拉维纳群岛的一部分,由阿拉斯加州负责管辖,长34公里、宽15公里,面积245平方公里,2000年人口50。坐标:55°18′14″N 131°47′11″W