静态变量static学习
2016-04-02 12:20
302 查看
工作时曾经遇到过这样的情况,代码中变量在运行前调试时是有值的,运行后变量值变为0,后来给变量前加了static之后,变量值才不会改变。
现在分析一下原因:
本人是在c#的类中声明的变量(以为在函数外部声明的就是全局变量,其实C#中是没有全局变量的概念,但可以通过static来模拟全局变量),该变量属于局部变量,随着函数的调用结束后会释放。通过给变量加static关键字,则改变了变量的生存期,即在函数调用与结束时值是保持不变的。现在简单学习一下静态变量。
static变量含义
静态变量,类型说明符static。
静态局部变量:
1. 函数内部的局部变量加static之后作用域并没有改变,还是在该函数内部。不同之处是普通局部变量会随着调用结束而被释放,而添加static后,无论变量是否被调用,都会一直存在。
2. 函数体内如果在定义的静态变量时进行初始化,则以后程序不再进行初始化操作,即静态变量的初始化语句只在第一次调用执行。
3. 静态局部变量的初始化必须是常量或者常量表达式。及时局部变量未赋初值,系统会自动赋值为0,而对于自动变量赋值则是不确定的。
静态全局变量:
全局变量的说明之前加static则够成静态全局变量。全局变量本身就是静态存储方式。静态全局变量和非静态全局变量的区别是
1. 非静态全局变量作用域是整个源程序,一个源程序由多个源文件组成时,非静态全局变量在各个源文件都是有效的。
2. 静态全局变量则是限制了作用域,只在定义该变量的源文件内有效。
以上分析得出结论是:
1. 把局部变量改成静态后改变它的存储方式,即改变生存期。
2. 把全局变量改为静态后是改变它的作用域,即改变它的使用范围。
现在分析一下原因:
本人是在c#的类中声明的变量(以为在函数外部声明的就是全局变量,其实C#中是没有全局变量的概念,但可以通过static来模拟全局变量),该变量属于局部变量,随着函数的调用结束后会释放。通过给变量加static关键字,则改变了变量的生存期,即在函数调用与结束时值是保持不变的。现在简单学习一下静态变量。
static变量含义
静态变量,类型说明符static。
静态局部变量:
1. 函数内部的局部变量加static之后作用域并没有改变,还是在该函数内部。不同之处是普通局部变量会随着调用结束而被释放,而添加static后,无论变量是否被调用,都会一直存在。
2. 函数体内如果在定义的静态变量时进行初始化,则以后程序不再进行初始化操作,即静态变量的初始化语句只在第一次调用执行。
3. 静态局部变量的初始化必须是常量或者常量表达式。及时局部变量未赋初值,系统会自动赋值为0,而对于自动变量赋值则是不确定的。
静态全局变量:
全局变量的说明之前加static则够成静态全局变量。全局变量本身就是静态存储方式。静态全局变量和非静态全局变量的区别是
1. 非静态全局变量作用域是整个源程序,一个源程序由多个源文件组成时,非静态全局变量在各个源文件都是有效的。
2. 静态全局变量则是限制了作用域,只在定义该变量的源文件内有效。
以上分析得出结论是:
1. 把局部变量改成静态后改变它的存储方式,即改变生存期。
2. 把全局变量改为静态后是改变它的作用域,即改变它的使用范围。
相关文章推荐
- 线性回归-3-最小二乘法
- 顺时针旋转矩阵90°的几种方法
- iOS开发,将子线程获取的数据实时更新到UI
- POJ 1470 Closest Common Ancestors
- Deep Learning---Overview
- 输出数中最小的一个数在最后!!!
- [置顶] js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
- [POJ 1149]PIGS[最大流][建图]
- Spring的jar包描述
- 使用Struts实现防止表单重复提交
- c的详细学习(3)数据的输入输出
- JS判断元素类型
- 算法总结(0)目录式概括
- JAVA中String的常用方法?
- ListView的异步加载图片问题与优化
- 【JQuery】使用hover()方法切换事件
- 妙味课堂——HTML+CSS(第一课)
- Could not start GlassFish Server 4.1 occupied by null
- centos7-初始化配置
- 低功耗蓝牙4.0BLE编程-nrf51822开发(3)