静态变量

✍ dations ◷ 2025-07-09 16:02:08 #计算机编程,计算机科学,程序架构

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

相关

  • VATC代码V(其他)是解剖学治疗学及化学分类系统的一个分类,这是由世界卫生组织药物统计方法整合中心(The WHO Collaborating Centre for Drug Statistics Methodology)所制定的药品
  • 燃烧弹燃烧弹,有时也称纵火弹,是指装填燃烧剂,以纵火为目的弹药。近现代燃烧弹通常以白磷、铝热剂、凝固汽油等做为燃烧剂。燃烧弹概念类似火攻,在古代即有应用。如在五代时,就有将火油
  • 兔形目 Lagomorpha兔形目(学名:Lagomorpha)是哺乳动物的一个目,有两个科:兔科(Leporidae)和鼠兔科(Ochotonidae)。兔形目是哺乳动物中一个存在谱系归置困难的目。早期它被归属到啮齿目下,构成一个超科。
  • 中国网中国网(域名:China.com.cn,英文版域名:China.org.cn,副标题:网上中国,2001年-)为中国外文出版发行事业局(中国国际出版集团成员)管理的新闻网站,由国务院新闻办公室领导,是中华人民共和国
  • 牟比士症候群牟比士症候群(Möbius syndrome,或拼做Moebius)是一个很罕见的遗传性神经失调疾病,明显的特征是颜面神经麻痹以及没办法控制眼球的移动。大部分刚出生患有牟比士症候群的人都伴
  • 禹之鼎禹之鼎(1647年-1709年),字尚吉,一作上吉,号慎斋,江苏兴化人,寄籍江都。清朝书画家。生于清顺治四年,籍贯扬州府兴化县人,寄籍江都。十余岁时曾为李氏“青衣”,幼师蓝瑛,苦练丹青,康熙二十
  • 拉蒂默拉蒂默县(Latimer County, Oklahoma)是美国奥克拉荷马州东南部的一个县。面积1,888平方公里。根据美国2000年人口普查,共有人口10,692人。县治威尔伯顿(Wilberton)。成立于1907年
  • 北莱茵-威斯特法伦北莱茵-威斯特法伦(德语:Nordrhein-Westfalen),位于德国西部,总人口超过1800万,是德国人口最多的联邦州。总面积34080平方公里,首府杜塞尔多夫。该州与比利时及荷兰接壤。莱茵-鲁尔
  • 衰减器衰减器是一种电子器件,可以在波形不失真的情形下,减少信号的振幅或功率。衰减器在功用上和放大器恰好相反:放大器提供增益,而衰减器提供小于1的增益,不过二者运作的方式不同。衰
  • 金囊藻目金囊藻目(Chrysocapsales)为藻类植物之一种。该植物于植物分类表上,归于金藻门 (Chrysophyta)金藻纲 (Chrysophyceae),同纲者尚有金胞藻目(Chrysomonadales)。