静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。
由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式。
1. 静态局部变量
在局部变量的说明前再加上static说明符就构成静态局部变量。
例如:
static int a,b;
static float array[5]={1,2,3,4,5};
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
(2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。
(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的 值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的 副作用,因此仍以采用局部静态变量为宜
2.静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中 都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错 误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此 static 这个说明符在不同的地方所起的作用是不同的。应予以注意。
静态变量
除范围之外,变量还有存活期,在这一期间变量能够保持它们的值。在应用程序的存活期内一直保持模块级变量和公用变量的值。但是,对于 Dim 声明的局部变量以及声明局部变量的过程,仅当过程在执行时这些局部变量才存在。通常,当一个过程执行完毕,它的局部变量的值就已经不存在,而且变量所占据 的内存也被释放。当下一次执行该过程时,它的所有局部变量将重新初始化。
但可将局部变量定义成静态的,从而保留变量的值。在过程内部用 Static 关键字声明一个或多个变量,其用法和 Dim 语句完全一样:
Static Depth
例如,下面的函数将存储在静态变量 Accumulate 中的以前的运营总值与一个新值相加,以计算运营总值。
Function RunningTotal (num)
Static ApplesSold
ApplesSold = ApplesSold + num
RunningTotal = ApplesSold
End Function局部变量、全局变量、静态变量
如果用 Dim 而不用 Static 声明 ApplesSold,则以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。
在模块的声明段声明 ApplesSold,并使它成为模块级变量,由此也会收到同样效果。但是,这种方法一旦改变变量的范围,过程就不再对变量排他性存取。由于其它过程也可以访问和改变变量的值,所以运营总值也许不可靠,代码将更难于维护。
声明所有的局部变量为静态变量
为了使过程中所有的局部变量为静态变量,可在过程头的起始处加上 Static 关键字。例如:
Static Function RunningTotal (num)
这就使过程中的所有局部变量都变为静态,无论它们是用 Static、Dim 或 Private 声明的还是隐式声明的。可以将 Static 放在任何 Sub 或 Funtion 过程头的前面,包括事件过程和声明为 Private 的过程。

局部静态变量和全局静态变量相关推荐

  1. 【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...

    局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中.     创建时若未初始化,则为随机值. 全局变量: 创建在static区,生命周期一直存在. 创建时若未初始化,则为0. 静态局部变量 ...

  2. 全局对象和全局静态、局部静态析构顺序

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/72904337 作者:car ...

  3. mysql系统变量配置文件_MySQL系统变量配置基础

    MySQL变量的概念 个人认为可以理解成MySQL在启动或者运行过程中读取的一些参数问题,利用这些参数来启动服务.响应或者支持用户的请求等 变量的配置 如果打算长期使用,应该写入配置文件,而不是在命中 ...

  4. 按键精灵定义全局变量_按键精灵2014全局数组变量传递(支持静态与动态)V2

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 最新版按键精灵2014已支持数组全局变量了,也就意味着以后多线程不需要再借助插件或字符 ...

  5. 全局变量和全局静态变量

    主要区别就是作用域:全局变量定义的变量可以被其他文件所看见(即可以被其他文件extern),全局静态变量的作用范围只限于本文件中. 关于在头文件中定义:在#include之后会在cpp文件中展开,相当 ...

  6. wpf绑定全局静态变量并且实现变更通知(mvvm)

    在实际的开发中,有一些集合或者属性可能是全局的,比如当你做一个oa的时候,可能需要展示所有的人员,这时这个所有的人员列表显然可以作为全局参数,比如这里有一个全局的静态属性UserList.而你在使用m ...

  7. 【转载】wpf绑定全局静态变量并且实现变更通知(mvvm)

    这篇看了之后,很有启发,也很有用!,分享给大家 以下是转载内容. ---------------- 版权声明:本文为CSDN博主「returnTrue999」的原创文章,遵循CC 4.0 BY-SA版 ...

  8. php 全局 静态变量,php的static关键字和全局变量

    1.全局变量[其不属于面向对象的思想,因为其放在对象之外的],面向对象有一个特点,其实封装的,php希望其所有的成员都应该放在类中:php的面向对象是基于面向对象的,不是纯粹面向对象的:也就是其可以面 ...

  9. 【原创】 关于全局静态变量初始化

    今天碰到个问题,直接上代码: Class Program{private static string _str= "StringValue";private static Uri ...

最新文章

  1. 【直播课】TensorRT工程落地实践:快速掌握模型优化部署
  2. 使用js对来判断一个字符串中括号是否平衡匹配
  3. 原创:pta做题笔记:注意数组大小大一点!//准考证号,试机座位,考试座位查询
  4. android jni malloc和free的使用
  5. ppt格式刷快捷键_普通人 | 4个我在知乎上都没有见过的PPT实用技巧
  6. Session的模拟
  7. TP框架表单验证 【包含ajax方法】
  8. Windows和VMware下ubuntu切换界面的快捷键
  9. td中使用overflow:hidden; 无效解决方案
  10. java编写的爬虫demo_我用Java写的第一个爬虫Demo-爬图片
  11. 新兴IT企业特斯拉(五)——中国救命
  12. c# 多线程 执行事件 并发_阿里P9大牛对多线程并发问题的一些总结
  13. 牛客 处女座和小姐姐
  14. 迅雷虚拟服务器,迅雷离线服务器UA
  15. 关于字体绘制的baseline (QT 和 D2D)
  16. 调整autocad字体输入框大小
  17. ESXi 8.0 Install
  18. gitlab ip变更runner拉取代码失败、shell启动springboot项目启动起来。
  19. 《HTML5与CSS3基础教程》第四章学习笔记 文本
  20. 【点宽专栏】模型投资的风险和矛盾

热门文章

  1. IntelliJ IDEA 如何配置MySQL数据库
  2. 使用NanoHttpd在Android上实现HttpServer
  3. torch中的inplace操作问题解决方法
  4. 新概念模拟电路——晶体管构建的放大电路静态分析
  5. 这个社会最大的现实是“大鱼吃小鱼,小鱼吃虾米”
  6. Day1作业2:多层菜单查询
  7. 拆解USB无线网卡,电路方案非常经典(附高清美图)
  8. Via浏览器怎么查看网页源码
  9. 计算机毕业设计(附源码)python校园社团管理系统
  10. 基于python+vue+elementUI高校社团管理系统(前后端分离)#毕业设计