10.1 局部变量
自动存储期限:变量的存储期限(storage duration)(或存储长度)是在【变量存储单元】存在期内程序执行的部分。存储单元是在包含该变量的函数被调用时“自动”分配的,函数返回时收回分配,所以称这种变量具有自动的存储期限。
静态存储期限:在局部变量声明中放置单词static可以使变量具有静态存储期限,有静态存储期限的变量拥有永久的存储单元,所以在整个程序执行期间都会保留变量的值。
块作用域:变量的作用域是可以引用该变量的程序文本的部分。局部变量拥有块作用域:从变量声明的点开始一直到所在函数体的末尾。因为局部变量的作用域不能延伸到其所属函数之外,所以其他函数可以把同名变量用于别的用途。
10.1.1 静态局部变量
void f(void) { static int i; /* static local variable */ ... }
因为局部变量i已经声明为static,所以在程序执行期间它所占据的内存单元是不变的。在f返回时,变量i不会丢失其值。
静态局部变量始终有块作用域,所以它对其他函数是不可见的。概括来说,静态变量是对其他函数隐藏数据的地方,但是它会为将来同一个函数的再调用保留这些数据。
10.1.2 形式参数
形式参数拥有和局部变量一样的性质,即自动存储期限和块作用域。
10.2 外部变量
外部变量是声明在任何函数体外的。外部变量(有时称为全局变量)的性质不同于局部变量的性质。
- 静态存储期限:就如同声明为static的局部变量一样,外部变量拥有静态存储期限。存储在外部变量中的值将永久保留下来。
- 文件作用域:外部变量拥有文件作用域:从变量被声明的点开始一直到所在文件的末尾。因此,跟随在外部变量声明之后的所有函数都可以访问(并修改)它。
10.3 程序块
1