静态变量

✍ dations ◷ 2025-10-18 00:49:41 #计算机编程,计算机科学,程序架构

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

相关

  • 词干在语言学中,词干(stem),或语干,是词的一部分。在不同情况下使用,其含义有差异。词干的其中一种含义,是指词缀所附着的部分。 例如在英语单词friendships中包含了词干friend,词缀-shi
  • 格言格言又称箴言,可以作为人们行为规范的言简意赅的语句,因其不仅凝聚古圣先贤的人生智慧,同时具备简练生动的表达方式。从句法结构角度说,格言是相对完整、相对独立的句子,可以独立
  • 裂谷地堑(英语:graben)在地质学上是一沉陷的地块、两旁有平行断层接壤。 地壳产生断裂变位时,地层沿着断层线断裂后,相对向下陷落的部分,成为地堑。
  • 长城鸟长城鸟属(属名:Changchengornis)是一种生存于下白垩纪的鸟类。它的化石于中国的炒米店子组发现,介乎于巴列姆阶与阿普第阶的边界,年代约1亿2500万年前。长城鸟除了模式标本(编号 G
  • 环海豹环海豹(学名:Histriophoca fasciata),又称带纹海豹,是海豹科环海豹属的唯一一个种,出没于北极地区。成年的环海豹有黑色的皮肤,上有四个白斑纹:一条白条绕着颈部,一条绕着尾部,其身躯
  • 19611961年欧洲歌唱大赛(Grand-Prix Eurovision de la Chanson Européenne 1961)为欧洲歌唱大赛之第6届比赛,于1961年3月18日在法国戛纳举行,此亦是1959年的赛场,主持人亦同。本年舞
  • 客家地区客家地区是指有较多客家人聚集的地区。一般来说客家人比较集中在中国的闽粤赣交界处,然而其他地方广东西部、广西东部等等也有不少客家人居住。客家人是分布范围较广的汉民系
  • En (字体排印学)en是字体排印学的计量单位,为em宽度的一半。根据定义,它等同于字体宽度的一半(如16点字体中就是8点)。名义上是小写字母n的宽度。en dash (–)和en 空格( )都是1 en宽。
  • 台北市国民中学列表台北市国民中学列表表列出台湾台北市各分区的国民中学。http://www.msjh.tp.edu.tw/
  • 2美元纸币美国2美元纸币($2)是美国货币的种类之一,现主要作为联邦储备券。2美元纸币高66.294毫米,阔155.956毫米,重约1克。其成分75%为棉,而余下的25%为亚麻。正面的人像为美国总统托马斯·