通俗易懂说static

1. static关键字有三个作用

1. 作用1:隐藏

因为所有未加static修饰的函数、变量都具有全局可见性,即其他文件可见,可用;
加了static修饰后,修饰的函数、变量就会对其他源文件隐藏,就只能在本文件内被访问了。
利用这一作用可以在不同文件中定义同名函数或变量,而不必担心命名冲突。

2. 作用2:保持变量内容持久

对于变量来说,第二个作用就是保持变量内容持久。
就是说,第一次初始化分配内存后,就算函数或者代码块执行完毕,该变量也不会被回收销毁,直到程序结束 static 变量才会被回收。

3. 作用3:初始化为0

对于变量来说,第三个作用就是变量初始化为0,存储在静态存储区。

2. static静态全局变量

  1. static静态全局变量,函数,只在当前文件可见,其他文件不可见
  2. static静态全局变量与其他全局变量的区别:是否其他文件可见

3. static静态局部变量

static静态局部变量与其他局部变量的区别:

  1. 生命周期: static静态局部变量虽然是局部的,但是它存在于程序的整个生命周期
  2. 访问权限: 虽然存在于整个生命周期,但是只能被当前函数访问
  3. 初始化:默认初始化为0
  4. 值:以后每次调用都是上次修改的值,因为其存储在全局存储区

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--------------

猜你喜欢

转载自blog.csdn.net/lqy971966/article/details/88988844