C语言 | 变量存储类型

 

01

概述

    变量的存储类型是指存储变量值的内存类型。变量的存储类型决定变量何时创建、何时销毁以及它的值将保持多久。

    有三个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。在这三个地方存储的变量具有不同的特性。

    变量的缺省存储类型取决于它的声明位置。凡是在代码声明的变量总是存储于静态内存中,全局变量或者static修改的局部变量属于这一类。

02

auto

    这是C语言默认的存储类别。自动变量(auto variable)声明在利用该变量的函数中,而声明时所用的关键字正是auto。这种变量会在函数被调用时自动创建,并于函数退出后自动销毁。因此,对于声明该变量的函数而言,它是个私有变量,或者叫做局部变量。

    一般而言,main函数中的局部变量在整个在整个程序运行期间都是正常存在的,只不过其活跃范围仅限于main罢了。

    如果递归地调用同一个函数,那么每次调用时所创建的auto变量都是不相同的(因此是局部的,下一次调用前上一次的变量已经销毁)。此外,还可以在代码块(block)中定义自动变量,这些变量只在声明该变量的代码块里有效。

03

extern

    这种变量声明于所有函数之外。在整个程序运行期间它们始终存在,并保持活跃。这种变量也称作全局变量(global variable),其默认值为0。

    extern变量与局部变量不同,程序里的每个函数都可以访问它。如果局部变量与全局变量同名,那么采用局部变量的声明。

    有时我们用extern关键字来声明这种变量,该变量从声明它的地方开始,一直到程序末尾,均保持可见。

04

static

    静态变量的值会一直保留到程序结束为止。它是用static关键字来声明的。

    这种变量可能是外部变量,也可能是局部变量,具体情况要根据声明的地点来确定。静态变量只在程序编译的时候初始化一次。

    4.1 内部静态变量

    内部静态变量是指声明在函数里的静态变量。这种变量的作用域一直延续到定义它的那个程序结束为止。此类变量与auto变量几乎完全相同,只不过它们在函数执行完之后依然存在(或者说存活),直到运行完整个程序为止。即使多次调用该函数,变量的值也仍然可以保留,而不会重置。如我们可以用它来统计函数的调用次数。

    4.2 外部静态变量

    外部静态变量是声明于所有函数之外的静态变量,它可以为程序中的每一个函数所使用。外部静态变量与一般的extern变量类似,只不过它仅仅在定义该变量的文件之内有效,而不像后者,可以在其他文件中被访问。

    4.3 静态函数

    静态声明也可以用来控制函数的可见范围。如果你在一个文件里面定义了某个函数,并且想令此函数只能被该文件内的函数所访问,那么可以把这个函数声明为static,使得其他文件无法访问它。

05

register

    register类型的变量存储在计算机的寄存器中。由于访问寄存器要比访问内存快,因此,把频繁用到的变量放在寄存器里,可以提高程序的执行速度。

    因为寄存器只能容纳很少的几个变量,所以我们使用必须谨慎:究竟应该把哪几个变量放在寄存器中。另一方面,如果寄存器满额,那么C 语言会自动把register形式的变量转换为非register的形式。

    不要将全局变量声明为register,因为那样做有可能会使该变量在程序运行的过程中始终占据着寄存器。

添加微信免费咨询高性价比云主机信息
微信号:kinnah333

未经允许不得转载:云技术 » C语言 | 变量存储类型

赞 (0)