static作用
2016-06-24 17:18
183 查看
1>隐藏:
如果加了static,就会对其他源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。
静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问
2>static变量还有两个特性:
1.保持变量内容的持久,只能初始化一次。存储在静态数据区的变量在程序刚开始运行就完成初始化,static变量初始值一定要是常量。
共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围。
2.默认初始化为0.在静态数据区,内存中所有的字节默认值都是0x00.
总结:static主要功能是隐藏,其次是因为static变量存放在静态存储区,所以具备持久性和默认值0.
[gfj@kfjk2 c]$ ./a.out
global local static
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
//static变量初始值一定要是常量
[gfj@kfjk2 c]$ gcc test.c
test.c: In function ‘main’:
test.c:9: error: initializer element is not constant
[gfj@kfjk2 c]$ ./a.out
a= 6
a= 7
a= 8
a= 9
a= 10
a= 11
a= 12
如果加了static,就会对其他源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。
静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问
2>static变量还有两个特性:
1.保持变量内容的持久,只能初始化一次。存储在静态数据区的变量在程序刚开始运行就完成初始化,static变量初始值一定要是常量。
共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围。
2.默认初始化为0.在静态数据区,内存中所有的字节默认值都是0x00.
总结:static主要功能是隐藏,其次是因为static变量存放在静态存储区,所以具备持久性和默认值0.
#include <stdio.h> int fun(void) { static int count = 10;//实际赋值没有执行过 return count--; } int count = 1; int main(void) { printf("global\t\tlocal static\n"); for(; count <= 10; ++count) { <span style="white-space:pre"> </span>printf("%d\t\t%d\n", count, fun()); } return 0; }
[gfj@kfjk2 c]$ ./a.out
global local static
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
//static变量初始值一定要是常量
#include <stdio.h> int main() { while(1) { int b = 2; static int a = 5 + b ; printf("a= %d\n",a); sleep(2); } }
[gfj@kfjk2 c]$ gcc test.c
test.c: In function ‘main’:
test.c:9: error: initializer element is not constant
#include <stdio.h> int main() { while(1) { static int a = 5;//<span style="font-family: Arial, Helvetica, sans-serif;">只能初始化一次,所以只执行了一次</span> a = a + 1; printf("a= %d\n",a); sleep(2); } }
[gfj@kfjk2 c]$ ./a.out
a= 6
a= 7
a= 8
a= 9
a= 10
a= 11
a= 12
相关文章推荐
- [转]使 Windows 下的 Qt 应用程序获得 Administrator 权限
- LuaJavaBridge - Lua 与 Java 互操作的简单解决方案
- 电脑桌面图标或者文件左下角出现蓝色问号解决办法
- Underscore.js 入门
- 类似问题 duplicate entry: com/example/apputils/BuildConfig.class
- haar detection demo code
- 定向爬取网页内容
- 回顾一学期的c++课程学习
- SMA、SMB、SMC封装的二极管尺寸区分
- 使用WebView实现离线阅读
- spring boot项目引用kaptcha
- Python中的__doc__
- android PixelFormat与ImageFormat的对比
- iOS 获取相册中图片的名字 url
- Play Framework 模板里使用注入访问数据层
- 关于angularJS绑定数据时自动转义html标签
- 智能手环APP软件开发
- java基础—方法重载(overload)
- U-Boot添加命令的方法及U-Boot命令执行过程
- JavaScript编程中实现对象封装特性的实例讲解