C真的已经差不多忘光了,看了几章K&R的CPL看得云里雾里的。发现某处写着:...,which can be declared static in the source file... thus be invisible outside it,忽觉很惊奇,static竟还有对外不可见的意思,竟然一点点印象都没有了。故google了一下C里面的static的用法。好吧,我得说,英文书我看一遍真的看不到什么东西,看来以后还得再翻看一遍。
static关键字,在C里主要有两种用法(C++/JAVA里还有静态成员的意思):
(1)局部静态变量
(2)外部静态变量/函数
一、局部静态变量:
与auto类型(普通)局部变量相比, static局部变量有三点不同
1. 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期 间都不释放. 两者之间的作用域相同, 但生存期不同。
2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次;故若其所在的函数每次被调用时static变量的值只会初始化一次 且其具有记忆功能。
3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的。
二、外部静态变量/函数
在C中static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。
此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区, 生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.