静态变量

✍ dations ◷ 2025-04-26 17:13:40 #计算机编程,计算机科学,程序架构

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

相关

  • 锂电池锂电池是以锂金属或锂合金为阳极材料,使用非水电解质溶液的电池,锂电池与锂离子电池不一样的是,前者是一次电池,后者是充电电池。锂电池的发明者是爱迪生。由于锂金属的化学特性
  • Homo sapiens智人(学名:Homo sapiens,意为“现代的、有智慧的人类”),生物学上归类为哺乳纲、灵长目、人科、人属的物种,分为早期智人和晚期智人两个发展阶段。按人类发展阶段,早期智人又可称古
  • 伦理现代生物分类群体从它们的 共同祖先遗传分化的图示。进化论介绍(英语:Introduction to evolution) 演化的证据 共同起源 共同起源的证据群体遗传学 · 遗传多样性 突变 · 自
  • span class=chemf style=white-space:nowrap;Csub21/sub二十一烷(英语:heneicosane)是含有21个碳原子的直链烷烃,化学式为C21H44或CH3(CH2)19CH3,外观为无色蜡状固体,化学性质相当安定。其衍生物二十一烷酸(CH3(CH2)19COOH)可做为制备脂
  • 多细胞动物多细胞生物是指由多个、分化的细胞组成的生物体,其分化的细胞各有不同的、专门的功能。大多数可以使用肉眼看到的生物是多细胞生物。 所有多细胞生物都属于真核生物。多细胞
  • 统合分析统计学上来说,元分析(meta-analysis,或译作后设分析、整合分析、综合分析、统合分析、荟萃分析)是指将多个研究结果整合在一起的统计方法。就用途而言,它是文献回顾的新方法。文
  • 南四县客语本文属于客家系列的一部分四县话,又名四县、四县腔(四县腔台湾客拼:xi ien/ian kiongˊ,客语白话字:si-yen/yan-khiông),是台湾客家族群使用的一种次方言,同时是台湾客家语次方言之
  • 国际标准期刊号国际标准连续出版物号(英语:International Standard Serial Number,简称ISSN)是一种类似于国际标准书号的期刊出版物代码。由于期刊出版物名称和内容的不定性,所以相对国际标准书
  • 中华奥林匹克委员会中华奥林匹克委员会(英语:Chinese Taipei Olympic Committee),简称中华奥会,是中华民国的国家奥林匹克委员会,负责处理中华民国在奥运、亚运等国际体育赛事的联系工作,并加强与国际
  • 保罗·欣德米特保罗·欣德米特(德语:Paul Hindemith,1895年11月16日-1963年12月28日),又译亨德密特、兴德米特等等,德国作曲家、音乐理论家、音乐教育家、中提琴家、指挥家。不论是音乐作品或是在