C语言
函数
变量的储存类型
自动变量
自动变量也称动态局部变量,Automatic Variable
自动变量的标准定义格式
auto 类型名 变量名
auto int temp
没有指定变量的存储类型,默认为自动变量(int temp)
自动变量的“自动"体现在进入语句块时自动申请内存,退出语句块时自动释放内存,仅能被语句块内的语句访问,退出语句块以后不能再访问。
在不同的并列语句块内可以定义同名变量,不会相互干扰,因为它们各自占据着不同的内存单元,并且有着不同的作用域。
注:
1.自动变量在定义时不会自动初始化,未初始化的自动变量的值是随机不确定的,即乱码。
2.自动变量在退出函数后,其分配的内存立即释放,再次进入语句块,该变量被重新分配内存,所以不会保持上次退出函数前所拥有的值。
静态变量
Static Variable的定义格式
static 类型名 变量名
static int temp
在函数内定义的静态变量,称为静态局部变量,静态局部变量只能在定义它的函数内被访问,而在所有函数外定义的静态变量,称为静态全局变量,静态全局变量可以在定义它的文件内任何地方被访问,但不能像非静态的全局变量那样被程序的其他文件所访问。
静态变量是与程序”共存亡“的,而自动变量是与程序块”共存亡“的。
外部变量
Extern Variable的标准格式
extern 类型名 变量名
extern int temp
如果在所有函数之外定义的变量没有指定其储存类别,那么它就是
一个外部变量。外部变量是全局变量,它的作用域是从它的定义点到本文件的末尾。
但是如果要在定义点之前或在其他文件中使用它,那么就需要关键字extern对其声明(注意不是定义,编译器并不对其分配内存)
外部变量保存在静态区内,在程序运行期间分配固定的储存单元,其生存周期是整个程序的运行期。没有显示初始化的外部变量由编译程序自动初始化为0。
寄存器变量
Register Variable
寄存器变量就是用寄存器储存的变量。
register 类型名 变量名
register int temp
寄存器(Register)是CPU内部的一种容量有限但数度极快的储存器。
现代编译器能自动优化程序,把普通变量优化为寄存器变量,并且可以忽略用户的register指定,所以一般无须特别声明变量为register。