C语言提供了多种存储类别(storage class)在内存中存储数据,这样一块内存称为对象(与面对对象编程中的类对象不同)。一个对象可以存储一个或多个值,也可能并未存储实际的值。
在程序中,访问对象通过变量声明,声明创建了一个标识符(identifier),标识符可用来指定特定对象的内容。除了可以通过标识符指定对象的方式外,还可使用解引用指针的方式。
基本概念
为了更好地理解不同的存储类别,首先简单介绍几个概念。
作用域
作用域:程序中可访问标识符的区域,有以下几种类别:
- 块作用域:块作用域变量的范围是从定义处到包含该定义的块末尾。这里的块可理解成一对大括号
{}
。 - 函数作用域:仅用于
goto
语句标签。一个标签即使首次出现在函数的内层块中,它的作用域也延伸至整个函数。 - 函数原型作用域:用于原型中的形参名,范围是从形参定义处到原型声明结束。这也是函数原型中有无变量名无关紧要的原因。
- 文件作用域:变量定义在函数的外面,也即全局变量,范围从定义处到所在文件的末尾。
链接
C语言有3种链接属性:
- 无链接:具有块作用域、函数作用域或函数原型作用域的变量,变量属于定义的块或函数。
- 外部链接:外部链接变量在多文件程序中使用。
- 内部链接:内部链接变量只能在一个翻译单元种使用。
翻译单元:一个源代码文件与其包含的头文件。
区分外部链接和内部链接关键看是否使用了static
,若使用了&#