美文网首页C++ 杂记
C++ 静态持续变量 static

C++ 静态持续变量 static

作者: 赵者也 | 来源:发表于2017-07-11 07:59 被阅读9次

C++ 为静态存储持续性变量提供了3种链接性:外部链接性、内部链接性和无链接性。

这3种链接性在整个程序运行期间都存在,与自动变量相比,它们的寿命更长。由于静态变量的数目在程序运行期间是不变的,因此程序不需要使用特殊的装置(如堆栈)来管理他们。编译器将分配固定的内存块来存储所有的静态变量,这些变量在整个程序运行期间一直存在。

如果没有显式地初始化静态变量,编译器将把它设置为0。默认情况下,静态数组和结构将每个元素或成员的所有位都设置为0。

三种静态持续变量的创建:

  1. 要想创建链接性为外部的静态持续变量,必须在代码块外面声明它;
  2. 要想创建链接性为内部的静态持续变量,必须在代码块外面声明它,并且使用static限定符;
  3. 要想创建没有链接性的静态持续变量,必须在代码块内声明它,并且使用static限定符。

三种静态持续变量的例子:

……
int  NUM_ZDS_GLOBAL = 80;                  //#1
static  int NUM_ZDS_ONEFILE = 50;          //#2

int  main(){
…
}

void  fun1(int n){
         static int  nCount = 0;            //#3
         int  nNum = 0;                     //#4
}

void  fun2(int q){
         …
}

#1、#2、#3 在整个程序运行期间都存在。在 fun1 中声明的 #3 的作用域为局部,没有链接性,这意味着只能在 fun1 函数中使用它,就像自动变量 #4 一样。但是,与 #4 不同的是,即使在 fun1 没有被执行的时候,#3 也保留在内存中。

#1、#2 的作用域为整个文件,即在声明的位置开始到文件末尾的范围内都可以被使用。

具体地说,可以在 main、fun1、fun2 中使用它们。由于 #2 的链接性为内部,因此只能在包含上述代码的文件中使用它;由于 #1 的链接性为外部,因此可以在程序的其他文件中使用它。

所有的静态持续变量都具有下面两个特征:

  1. 未被初始化的静态变量的所有位都被设置为0;
  2. 只能使用常量表达式来初始化静态变量。

常量表达式可以使用字面值常量、const 常量和 enum 常量以及 sizeof 操作符。

相关文章

  • C++ 静态持续变量 static

    C++ 为静态存储持续性变量提供了3种链接性:外部链接性、内部链接性和无链接性。 这3种链接性在整个程序运行期间都...

  • C++面试考点总结

    static作用是什么?在C和C++中有何区别? static可以修饰局部变量(静态局部变量)、全局变量(静态全局...

  • java随笔

    static变量和static方法 static变量 1.static修饰的变量:静态变量,静态变量在内存中只有一...

  • Java中的静态内部类

    一:静态内部类 使用static修饰的变量是静态变量,使用static 修饰的方法是静态方法,静态变量和静态方法都...

  • static有什么用途

    在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。 static 属于静态变量,使用它...

  • JAVA——static修饰符解惑及使用

    1. static的作用 static可以修饰变量,被static修饰的变量叫做静态变量,程序运行时静态变量存放在...

  • C语言中static关键字作用

    static修饰变量 1 在块中使用static修饰变量 它具有静态存储持续时间、块范围和无链接。 即作用域只能在...

  • static的作用

    在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。static属于静态变量,使用它修饰...

  • static关键字

    static的作用0.static可以修饰变量,被static修饰的变量叫做静态变量,程序运行时静态变量存放在方法...

  • php 变量 静态变量 简单理解 非原创

    什么是static静态变量?(以下为在C语言中的理解) 静态变量 类型说明符是static。 静态变量属于静态存储...

网友评论

    本文标题:C++ 静态持续变量 static

    本文链接:https://www.haomeiwen.com/subject/zmjphxtx.html