------Java培训、Android培训、iOS培训、.Net培训--------
一、static和extern修饰局部变量
1、static与extern对局部变量的作用
1)延长局部变量的声明周期,从程序到程序退出,但是它并没有改变程序的作用域
2)定义变量的代码在整个程序运行期间仅仅会执行一次
例如:
打印结果:
没有使用static修饰局部变量:
0
0
0
使用static修饰局部变量:
0
1
2
分析结果:
使用局部变量后,每次对局部变量的修改都会影响下一次调用它的而结果。因为静态变量的定义只会被执行一次,每次调用函数时并没有真的释放掉该静态局部变量。因此每次修改的都是该局部变量。此时,【静态局部的变量的声明周期被延长了】。
【注意】1、extern是不能够修饰局部变量的
例如:
二、static和extern修饰全局变量
1、static 对全局变量的作用
static修饰的全局变量,表示该全局变量只能在该文件中使用,而不能在其他文件中访问。
例如:
在Test.h头文件中
在main.c源文件中
打印结果:
访问普通全局变量:age = 10
直接访问静态全局变量:static age = 0
调用显示静态变量的函数:static age = 20
分析结果:
由结果可知,静态全局变量只能在定义的文件内使用,因此也称为内部变量。
【注意】在不同的文件中,使用static可以声明同名的变量
2、extern修饰的全局变量
表示当前变量,可以在本文件中使用,也可以在其他文件中使用。
例如:
把上例中
Test.h 文件中的
static int staticAge;
改成
extern int staticAge;
把Test.c文件中的
static int staticAge =20;
改为:
extern int staticAge =20;
在编译执行,结果为:
直接访问extern全局变量:static age = 20
【注意】1、extern声明的全局变量(在文件A中),如果B 文件包含A,那么B文件中就不能声明同名的变量。
2、变量定义为全局变量时,可以省略extern
3、不能用extern不能声明不存在的变量,即声明的变量,要么在本文件定义要么在其他文件有定义。
4、全局变量默认初始化为0
三、static和extern修饰函数
1、static和extern对函数的作用
1)static修饰的函数只能用在本文件,在其他文件中引用时会报错,就是内部函数。
2)extern修饰的函数不仅能在本文件中使用,也能在其他文件中使用。一般可以省略掉extern关键字。