static函数与普通函数

static全局变量与普通的全局变量:static全局变量只初使化一次,防止在其余文件单元中被引用;
函数

static局部变量和普通局部变量:static局部变量只被初始化一次,下一次依据上一次结果值;
  static函数与普通函数:static函数在内存中只有一份,普通函数在每一个被调用中维持一份拷贝。spa

 

一、全局静态变量
在全局变量以前加上关键字static,全局变量就被定义成为一个全局静态变量。
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)做用域:全局静态变量在声明他的文件以外是不可见的。准确地讲从定义之处开始到文件结尾。

定义全局静态变量的好处:
1)不会被其余文件所访问,修改
2)其余文件中可使用相同名字的变量,不会发生冲突。

二、局部静态变量
在局部变量以前加上关键字static,局部变量就被定义成为一个局部静态变量。
1)内存中的位置:静态存储区
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)做用域:做用域仍为局部做用域,当定义它的函数或者语句块结束的时候,做用域随之结束。

注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改成静态存储区。可是局部静态变量在离开做用域以后,并无被销毁,而是仍然驻留在内存当中,直到程序结束,只不过咱们不能再对他进行访问。
当static用来修饰全局变量的时候,它就改变了全局变量的做用域(在声明他的文件以外是不可见的),可是没有改变它的存放位置,仍是在静态存储区中。

3静态函数
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
静态函数只是在声明他的文件当中可见,不能被其余文件所用。
定义静态函数的好处:
1)其余文件中能够定义相同名字的函数,不会发生冲突
2)静态函数不能被其余文件所用。 存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto和register对应自动存储期。具备自动存储期的变量在进入声明该变量的程序块时被创建,它在该程序块活动时存在,退出该程序块时撤销。
关键字extern和static用来讲明具备静态存储期的变量和函数。用static声明的局部变量具备静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,可是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。
对象

相关文章
相关标签/搜索