天天看点

C/C++面试题:static(静态)变量的作用

C /:

 static 的作用:          (1)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量在这一函数被调用的过程中其值维持不变

         (2)在函数体外(但在模块内),它的作用域范围有限制,即如果一个变量被声明为静态的,那么该变量可以被模块内的所有函数访问,但不能被模块外其他函数访问。如果一个函数被声明为静态的,那么该函数与普通函数作用域不同,其作用域仅在本文件中,它只可被这一模块内的其他函数调用,也就是说,这个函数被限制在声明它的模块的本地范围内使用。

         (3)内部函数应该在当前源文件中说明和定义,对于可在当前源文件以外使用的函数,应该在一个头文件中说明,使用这些函数的源文件要包含这个头文件。

 static 全局变量和普通的全局变量的区别:          static 全局变量只初始化一次(防止在其他文件单元中被引用);

  static 局部变量和普通的 局部 变量的区别:          static 局部变量只被初始化一次,下一次的运算依据是上一次结果值;

 static 函数与普通函数的区别:

         作用域不一样,static 函数只在一个源文件中有效,不能被其他源文件使用;

C++/:          在类内部成员的声明前加上 static,即该成员就是类内部的静态数据成员,特点?

              (1)静态数据成员是类成员;(无论类的对象被定义了多少个,静态数据成员在程序中也只有一份复制品)

              (2)静态数据成员存储在全局数据区,属于本类的所有对象共享,不属于特定的类对象;

              (3)static 成员变量的初始化在类外,不能加上 private 。

 引申1:为什么 static 变量只初始化一次?

         对于所有的变量都只初始化一次,而由于静态变量具有 “记忆” 功能,初始化后,一直都没有被销毁,都会保存在内存区域中,所以不会再次初始化。

         存放在静态数据区的变量的生命周期一般与整个源程序 “同生死”、“共存亡”,所以它只初始化一次。

 引申2:在头文件中定义静态变量,是否可行?为什么?

         不可行,如果在头文件中定义静态变量,会造成资源浪费的问题,同时也可能引起程序的错误。因为如果在使用了该头文件的每个 C 语言文件中定义静态变量,在每个头文件中都会单独存在一个静态变量,从而会引起空间浪费或者程序出错。

继续阅读