`
andrew913
  • 浏览: 187523 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

static 变量使用详解

 
阅读更多
1. static 变量

静态变量的类型 说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

2. 静态局部变量
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。


(2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
(3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以 看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成 意外的副作用,因此仍以采用局部静态变量为宜。

3.静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构 成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在 定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此 可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量 后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。
分享到:
评论

相关推荐

    PHP中的静态变量及static静态变量使用详解

    主要绍了PHP中的静态变量及static静态变量使用详解的相关资料,需要的朋友可以参考下

    Duanxx的Java学习:关键字Static详解

    关键字Static就是为了满足上面提到的两种...当某一个变量或方法被声明为Static的时候,这个变量或方法就不再和任何一个类的实例对象绑定,即便没有创建任何一个实例对象,也可以方位Static的变量或者调用Static的方法

    Java中static变量作用和用法详解

    Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问.下面我们来详细了解一下吧

    php中static静态变量的使用方法详解

    php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。

    C++中的extern声明变量详解

    今天我们只谈extern,什么const、static之类等等与之相关或不相关的一律忽略,下面就分别对以上两种情况一一讲解 声明和定义 既然提到extern声明变量,那我们就必须搞清楚声明和定义的区别。 这里我们将普通数据变量...

    C++中 静态局部变量实例详解

    以前经常使用和了解static作用在全局变量前,以至于甚至把static当做全局变量的代名词,但是其实static还可以作用于局部变量前 静态局部变量的意义: 1.分配空间在全局数据栈上 2.作用域只局限于当前的函数范围内...

    C++ static关键字的原理及用法详解

    `static`关键字在C++中的使用确实涉及到多个方面,包括局部变量的存储期、全局变量和函数的链接属性,以及类成员的访问方式。正确使用`static`关键字可以帮助我们更好地管理变量的生命周期和访问范围,以及实现类的...

    final和static用法详解JAVA

    根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。

    c语言stack(栈)和heap(堆)的使用详解

    3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区...

    浅谈C/C++中的static与extern关键字的使用详解

    一.C语言中的static关键字在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。(1)修饰局部变量一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该...

    详解c++ 静态成员变量

    C++的static关键字可修饰类成员变量/方法,表示变量/方法不从属于特定对象,而是属于类的。仔细琢磨静态成员变量,会发现其与C++的方式既相容也矛盾,具有特殊性。 先说相容的一面。·C/C++·有声明和定义的说法:...

    Java下static关键字用法详解

    成员变量(但是不能修饰局部变量)  3. 方法  4. 接口(内部接口)  5. 类(只能修饰在类中的类, 即静态内部类)  6. jdk 1.5 中新增的静态导入  那么static 修饰的表示什么呢? 当创建一个类时,是在创建一个...

    对Pyhon实现静态变量全局变量的方法详解

    python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问题,就是通过模块来实现全局变量。 首先新建一个global_var_model .py的文件,...

    c# static的全部用法收集整理

    static的全部用法 要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键字... 而static变量的声明是: static int a; static string s; 这样似乎可以更有利于理解auto和static是

    详解php用static方法的原因

    static全局变量和普通全局变量,static局部变量和普通局部变量,static函数与普通函数的区别?下面本文将一一为你解答。  (1)全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身...

    JAVA面试题 static关键字详解

    面试官Q1:请说说static关键字,你在项目中是怎么使用的? static 关键字可以用来修饰:属性、方法、内部类、代码块; static 修饰的资源属于类级别,是全体对象实例共享的资源; 使用 static 修饰的属性,静态属性...

    PHP静态成员变量和非静态成员变量详解

    数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态...

Global site tag (gtag.js) - Google Analytics