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具有全局唯一性的特点, 每次调用时, 都指向同一块内存, 这就造成一个很重要的问题 ---- 不可重入性!!!
这样在多线程程序设计或递归程序设计中, 要特别注意这个问题.

二、外部静态变量/函数
Cstatic有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。, 但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函 )。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

第三种是c++中的应用

 
原创粉丝点击