static关键字简析

在说明static关键字之前,先要说明以下几个概念:

局部变量:局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期)。

全局变量:全局变量指在所有代码块{}之外定义的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内存单元。同时其作用域很广,整个文件都有效甚至别的文件也能引用它。

链接属性:函数在使用的时候可能在不同的源文件中,每个源文件单独编译完成之后生成对应的目标文件,所有的目标文件以及那些从一个或者多个函数库中引用的函数,链接在一起形成了可执行程序。那相同的几个标识符出现在几个不同的源文件中,标识符的链接属性决定了如何处理。可分为外部链接属性(external),内部链接属性(internal)和无链接属性(none).

外部链接属性:一个标识符,不仅可以在当前源文件使用。使用extern的声明可以在其他源文件中使用。即属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体。

内部链接属性:属于该链接属性的标识符在同一个源文件内的所有声明中都指向同一个实体,但位于不同源文件的多个声明则分属不同的实体。

在C语言中,static关键字可以用于以下三种:

1作用于局部变量:

  局部变量定义时,带有static关键字,表示其为静态局部变量,只被初始化一次,之后每次调用函数时,该变量值为上次函数退出时的值。即,改变量的生存周期被扩展到整个程序运行时间段内,即编译时就为变量分配内存,直到程序退出才释放存储单元。这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变)。

2 作用于全局变量:

   用static声明外部变量,为了限制某些外部变量的作用域,使其只在本文件中有效,而不能被其他文件引用,可以用static关键字对其作出声明。用static声明外部变量,会改变其链接方式,使其只在本文件内部有效,而其他文件不可连接或引用该变量,即将外部链接属性改为内部链接属性。

3.作用于函数:

  使用static用于修饰函数时,表示该函数为静态函数,只能在本文件中被调用。即将函数的外部链接属性改为内部链接属性。

猜你喜欢

转载自blog.csdn.net/mmwwxx123/article/details/79899332