C语言中static关键字的作用
C语言中static关键字的作用是指在C语言中,static关键字对变量和函数的存储期和作用域的影响。
一、C语言中的存储期
在C语言中,变量和函数可以分为两种存储期:自动存储期和静态存储期。自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。静态存储期的变量和函数则具有静态存储期,或者静态范围,虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。
二、生存周期
C语言中的变量和函数可以分为局部变量和全局变量。局部变量在每次函数调用的时候分配空间,在函数调用结束之后销毁。全局变量在程序开始运行时分配空间,在程序结束时销毁。如果局部变量和全局变量重名,局部变量会暂时覆盖掉全局变量。全局变量只能用常量表达式初始化,因为程序开始运行时要用适当的值来初始化全局变量,所以初始值必须保存在编译生成的可执行文件中,因此初始值在编译时要计算出来。
三、C语言中static关键字的作用
static关键字可以修饰变量和函数,使其具有静态存储期和静态范围。
三、1.static作用的变量
static关键字可以修饰全局变量和局部变量,使其具有静态存储期和静态范围。
1.static修饰全局变量
在全局变量前加static,全局变量就被定义成为一个全局静态变量。特点如下:存储区在静态存储区,初始化未经初始化的全局静态变量会被程序自动初始化为0,作用域在声明该变量的文件之外是不可见的。
2.static修饰局部变量
在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。特点如下:存储区在静态存储区,初始化是在编译时进行的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
三、2.static作用的函数
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
四、static作用的变量、函数与普通变量和函数区别
static作用的变量和函数与普通变量和函数的主要区别在于存储期和作用域。
四、1.static作用的变量与普通变量和函数区别
static作用的变量和普通变量的主要区别在于存储期和作用域。static全局变量与普通的全局变量有什么区别?全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。
四、2.static作用的函数与普通函数区别
static作用的函数与普通函数的主要区别在于作用域。static函数只是在声明他的文件当中可见,不能被其他文件所用,而普通函数可以被其他文件所用。