c语言中static的用法
来源:互联网 发布:淘宝视频免费上传 编辑:程序博客网 时间:2024/05/17 04:41
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用。本文只介绍c中的使用
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数
一、局部静态变量
在C/C++中, 局部变量按照存储形式可分为三种auto, static, register
与auto类型(普通)局部变量相比, static局部变量有三点不同
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的. (对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)
特点: static局部变量的”记忆性”与生存期的”全局性”
所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.
注意事项:
1. “记忆性”, 程序运行很重要的一点就是可重复性, 而static变量的”记忆性”破坏了这种可重复性, 造成不同时刻至运行的结果可能不同.
2. “生存期”全局性和唯一性. 普通的local变量的存储空间分配在stack上, 因此每次调用函数时, 分配的空间都可能不一样, 而static具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!
这样在多线程程序设计或递归程序设计中, 要特别注意这个问题.
二、外部静态变量/函数
在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。, 但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函 数)。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
第三种是c++中的应用
- C语言中static的用法小结
- c语言中static的用法
- c语言中static的用法
- c语言中static的用法
- C语言中static的用法
- 在C语言中Static的用法
- c语言中static的用法
- c语言中static的用法
- c语言中 static 用法
- c语言中static 用法
- c语言中static 用法
- c语言中static 用法
- c语言中static 用法
- c语言中static用法
- c语言中static 用法
- c语言中static 用法
- c语言中static 用法
- c语言中static 用法
- oracle10g错误信息(ORA-29250~ORA-32775 )
- Microsoft公司 .CAB文件格式
- 有关pagecontrol控件的各种使用方法
- HLSL Shader Reference(1)
- (转)C# 日期格式转换
- c语言中static的用法
- smart memory pool :内存池--智能内存池 新鲜大出炉啦
- 让您的小站融合ajax,十分钟就OK【原创教程】http://admin5.com/article/20071105/60995.shtml
- 暴风影音3 Build version : 3.7.11.13 漏洞
- Silverlight Tools Alpha for Visual Studio 2008正式版下载地址
- linux内核学习笔记(三)
- ASP.NET防止页面被多次提交
- VS2005使用DEF文件来生成DLL与Lib
- 硬盘安装红旗RedFlag6.0 Linux以及工具盘