今天在面试的时候面试官问到了static把我给问懵了,发现自己的知识储备真的不够。
普通的局部变量储存在进程的栈空间,使用完之后会立即被释放,即在函数运行完毕之后其值变回消失。
但是static变量在初始化的时候便会存入静态存储区中,就算没有赋初值也会默认设置为0,即使函数返回其值不会发生改变。在下一次进入到该函数的时候,定义static局变量的语句就等同于失效了,比如说static变量a = 1进入到函数中,执行语句static a = 0; 这样a的值还是保持为1,并不会初始化为0。
这一点特性和全局变量相似,但是static修饰的局部变量其作用域在定义的函数内。大大增加了程序的模块化。
普通的全局变量对于整个工程文件时可见的,可以通过extern关键字对其进行调用,所以在其他的工程文件中不能定义一个与其同名的变量,(重复定义警告)。
但是使用static对其进行修饰,该变量的作用域就会被限制在该.c文件中,在其工程的其他文件中可以定义一个与其同名变量。两者互不影响。
普通函数在工程内可以使用头文件的方式,在其他的.c文件调用。
static修饰的函数类似于全局变量,其作用域限定在该.c文件中其他的文件不可调用该函数。