static的中文意思为“静止的,静态的”,它是用来修饰变量和函数的,而具体的作用如下:
static:
* 1.可以修饰局部变量
* 2.可以修饰全局变量
* 3.可以修饰函数
一.首先,我们先来讲解static对于局部变量的修饰作用
1.先来看一组代码

程序首先在主函数中执行,在主函数中有一个循环体while,它被限制了条件,执行了10次,在每一次循环的时候调用test函数,调用时,进入函数内部,发现函数的任务就是:变量a=1,执行a++为2,输出a的值,也就是每循环一次,输出一次a的值,但通过学习变量的作用域与生命周期,我们可以知道,函数中的变量都是局部变量,一出了函数(作用域),就会被内存销毁,没有历史记录,一切从头开始。那么这10次的循环,输出的a的值都为2。
那么在test函数使用static关键字后,又有什么变化?如图所示,我们可以发现,第一次的循环执行完后,a的值为2,执行下一次的循环时,再次调用test函数时,发现a的值成为了3

第三次循环,a的值变成了4,我们可以总结出一个规律,每执行一次循环,a的值就比上一次多1,而这可以归结到static中,当static修饰局部变量时,会累积它的值,让a避免了一出函数作用域就会被销毁的情况,从而延长了局部变量的生命周期,改变了变量的存储位置,变得和程序的周期一样长。一句话总结:就是为局部变量增加了一个“延寿”的buff。
二.static修饰全局变量的作用
还是先来看一组代码

我在程序中创建了另一个add.c文件,文件中创建了一个全局变量v_gal,为了让源.c文件能使用它,特意去声明了一下它的存在,好让程序在执行的时候不会报错,输出的值也如图所示。我们知道全局变量有外部链接属性,它可以通过被其他文件声明就能借来用。
而使用static后,发现即使变量被声明,程序也无法解析的错误指令,是由于static修饰全局变

量后,变量的外部链接属性被迫改成了内部链接属性,也就是说该变量只能在add.c文件中使用,外部文件无法访问。
而使用static修饰全局变量的意义在哪?它虽然限制了全局变量的作用域,但用于保护这个变量也是很好的,因为是全局变量,任何一个文件都可以访问到它,那么它的安全性就大大降低,为了增强它的独立性,安全性,就可以用到static去修饰它。
三.static修饰函数

如图所示,还是两个源文件,其中一个源文件中创建了函数Fun,另一个源文件中不仅定义了主函数,也声明了函数的存在,可以使主函数能成功的调用另一个文件的函数,这也是因为函数具有和全局变量一样的功能--外部链接属性。
而加入static后,错误与全局变量的static展现方式如出一辙,程序仍然无法解析外部命令,函数也只能用于此源文件中,外部文件无法访问。