最近学习C语言,看到变量的存储类型,对其中的区别不是很清楚,于是便总结了一下,便于以后查询阅读。
C语言中变量的存储类型有四种,分别是auto static extern register
局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进行说明, 当auto省略时, 所有的非全局变量都被认为是局部变量, 所以auto实际上从来不用。
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要被其它文件使用。因此, 必须将全局变量通知每一个程序模块文件, 此时可用extern来说明。
register称为寄存器变量,为提高执行效率,C语言允许将局部变量的值放在运算器中的寄存器里,需要时直接从寄存器中取出参加运算,不必再到内存中去存取,这种变量叫做寄存器变量,用关键词register作说明。 寄存器变量只能用做局部变量,它不能太多,因寄存器有限。寄存器变量太多时,编译系统将其自动转为自动变量。
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全局变量。
1. 静态局部变量
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。
2. 静态全局变量
Turbo C将大型程序分成若干独立模块文件分别编译, 然后将所有模块 的目标文件连接在一起, 从而提高编译速度, 同时也便于软件的管理和维护。静态全局变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量,同时只能在其定义之后的函数中使用的变量。它与全局变量的区别是: 全局变量可以再说明为外部变量(extern), 被其它源文件使用,而静态全局变量却不能再被说明为外部的, 即只能被所在的源文件使用。