通俗易懂说static
1. static关键字有三个作用
1. 作用1:隐藏
因为所有未加static修饰的函数、变量都具有全局可见性,即其他文件可见,可用;
加了static修饰后,修饰的函数、变量就会对其他源文件隐藏,就只能在本文件内被访问了。
利用这一作用可以在不同文件中定义同名函数或变量,而不必担心命名冲突。
2. 作用2:保持变量内容持久
对于变量来说,第二个作用就是保持变量内容持久。
就是说,第一次初始化分配内存后,就算函数或者代码块执行完毕,该变量也不会被回收销毁,直到程序结束 static 变量才会被回收。
3. 作用3:初始化为0
对于变量来说,第三个作用就是变量初始化为0,存储在静态存储区。
2. static静态全局变量
- static静态全局变量,函数,只在当前文件可见,其他文件不可见
- static静态全局变量与其他全局变量的区别:是否其他文件可见
3. static静态局部变量
static静态局部变量与其他局部变量的区别:
- 生命周期: static静态局部变量虽然是局部的,但是它存在于程序的整个生命周期
- 访问权限: 虽然存在于整个生命周期,但是只能被当前函数访问
- 初始化:默认初始化为0
- 值:以后每次调用都是上次修改的值,因为其存储在全局存储区
4. 举例:
#include <stdio.h>
//未加static 修饰
void func(void)
{
int iTmp = 1;
printf("func iTmp =%d\n", iTmp );
iTmp ++;
}
//加static 修饰
void func_static(void)
{
static int iTmp = 1;
printf("func_static iTmp =%d\n", iTmp );
iTmp ++;
}
int main(void)
{
printf("-----------first print ----------\n");
func();
func_static();
printf("--------second print------------\n");
func();
func_static();
printf("--------------end--------------\n");
return 0;
}
**结果:**
--------first print ------------
func iTmp = 1
func_static iTmp = 1
--------second print------------
func iTmp = 1
func_static iTmp = 2
--------------end--------------