静态变量

✍ dations ◷ 2025-06-29 10:57:52 #计算机编程,计算机科学,程序架构

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

相关

  • 巨人症巨人症,亦称为巨大症,是一种疾病,表现为过度生长且其身高明显高于人类平均身高。该疾病是由于人类在童年时期生产过多的生长激素,使得患者身高异于常人,达2.13米(7.0英尺)至2.74米(9
  • 暗视野显微镜暗场显微(英文:Dark-field microscopy)或称暗视野显微(英文:Dark ground microscopy)描述光学显微和电子显微中的一种特殊显微手法,除去观测物体以外的光线或电子进入物镜,使目
  • 汉弗里·戴维汉弗里·戴维爵士,第一代从男爵(英语:Sir Humphry Davy, 1st Baronet,1778年12月17日-1829年5月29日),英国化学家。是发现化学元素最多的人,被誉为“无机化学之父”。一般认为戴维是
  • Escherichia coli大肠杆菌(学名:Escherichia coli,通常简写:E. coli)是人和动物肠道中著名的一种细菌,主要寄生于大肠内,约占肠道菌中的0.1%。大肠杆菌是一种两端钝圆、能运动、无芽孢的革兰氏阴性
  • 墓纸墓纸,是华人在清明等节庆扫墓时压在坟墓上的纸钱。四川也叫“坟飘纸”。今日较流行的墓纸有两种款式。一乃红、绿、黄、白、靛等色的,称为“五色纸”,是泉州人士所惯用。另为纯
  • span class=nowrapCu(ClO)sub2/sub/span次氯酸铜是一种无机化合物,化学式为Cu(ClO)2。有漂白性。氧化铜与次氯酸或氯水反应,或硫酸铜和次氯酸钙在溶液中反应,都可以得到Cu(ClO)2。
  • 攻、受、不分在男同性恋文化的同性性行为中,攻(1、Top)、受(0、Bottom)和不分(0.5、Versatile)都是用于描述性行为中的位置,特别是男男性行为的肛交中。1通常是肛交中的插入方,而0则往往是被插入
  • AZ截至2010年亚利桑那州(英语:Arizona,i/ɛərᵻˈzoʊnə, ærᵻ-/)是美国一个位于西南部的州份,同时也是西部和山区州份之一。此州是美国第6大及人口第14大的州份。首府和最大城
  • 诸圣相通诸圣相通(拉丁语:communio sanctorum)是一个基督教概念,天主教称为“诸圣相通功”,新教称为“圣徒相通”,指基督教会成员的精神联合,其中包括活人和死人,但不包括受诅咒的人。他们都
  • 球探 (足球)一名足球球探常会作为代表球会出席足球赛事以收集情报。基本上,它们可以分为两类球探:专才球探及战术球探。球员球探 或专才球探 会评价球员的天分,以期能为其雇主跟他们签下职