关键字:static
1.铺垫
1.1全局变量可以跨文件访问吗?答:可以;
1.2函数可以跨文件访问吗?答:可以
1.3在具体的应用场景中,程序员不想让全局变量或者函数跨文件访问,只在本文件内部被访问?答:可以——引出static关键字
2.static
2.1static修饰全局变量,该变量只能在本文件内被访问,不能被外部其他文件直接访问;但是可以被间接访问——通过访问非static修饰的函数,访问static修饰的全局变量
2.2static修饰函数,该函数只能在本文件内被访问,不能被外部其他文件直接访问;但是可以被间接访问——通过访问非static修饰的函数,访问static修饰的函数
解释:static修饰全局变量或函数,限制了作用域,本来是个文件都可以访问,修饰之后,只能在本文件中被访问
2.3static修饰局部变量,更改局部变量的生命周期,作用域不变,临时变量->全局生命周期
但是可以通过全局变量指针,来获取局部变量的地址,从而访问变量
扩展:进程地址空间的知识
static修饰局部变量,将局部变量从栈区定义,变成了已初始化全局数据区定义,延长了生命周期;
举例:
#include<stdio.h>
void fun() {
static int a = 0;
}
int main(){func();
printf("a=%d\n", a);
return 0;
}//此程序会报错:未定义标识符a;a的作用域依旧是func()代码块;但生命周期为全局生命周期
//func()函数跑完之后,空间会被回收,可是a依旧被保存在内存中;
int *p=NULL;
void fun() {
static int a = 0;p=&a;
}
int main(){
printf("a=%d\n", *p); //可以如此将a拿出来
return 0;
}