static的作用有哪些?

C语言中的static的作用有:1.修饰局部变量。2.修饰全局变量。3.修饰函数。

1.修饰局部变量。

 

 如图:

当只用int 定义变量a时,此时程序运行结果为:

 程序运行结果为10个2,这是为什么呢??

原因是此时的变量a为局部变量,当主函数中的while循环每调用一次test()的时候,变量a就会被创建,而调用结束时,此时a就会被销毁,当再一次循环调用test()的时候,a又会被创建并赋值为1,所以每次循环,a都会被重新创建一次,每次test()打印的结果都是2;

而利用static对局部变量修饰后:

 再次运行程序:

 此时运行的结果就是2~11;原因是static对变量a进行了修饰,将变量a的生命周期进行了延长,使a出了它的作用范围后并没有被销毁,如果没有static,每次调用test结束时a都会被销毁。

所以利用static修饰局部变量,可以延长其生命周期。

2.static修饰全局变量。

 

 

这是一般使用全局变量的方法,程序可以正常运行,运行结果为:2023

同一个工程下的另一个文件里用全局变量定义g_val,但此时程序会报错

这就需要我们在主函数所在的文件里用extern声明外部符号g_val;

 

 此时程序就能正常运行;而当我们用static在add.c文件中修饰全局变量g_val时:

 

 此时程序就会报错。那这是为什么呢??

首先我们讨论全局变量的特性。全局变量是可以在整个工程中使用的;全局变量是具有外部链接属性的,在其他源文件内部,只要适当的声明就可以使用;

而当static修饰全局变量时,全局变量的外部链接属性就变成了内部链接属性,就只能在自己所在的内部.c文件中使用了,其他.c内部文件内就不能使用了。

所以static修饰全局变量,是会将全局变量的外部链接属性变成内部链接属性的,影响了全局变量的作用域。

 3.static修饰函数。

与修饰全局变量类似,当没用static修饰的时候

 程序能够正常运行并打印;当static修饰Add函数时

 此时程序报错;

原因和static修饰全局变量相同:

函数是具有外部链接属性的,当static修饰函数后,函数的外部链接属性就变成了内部链接属性;

被static修饰的函数只能在自己所在的.c文件中使用。最终相当于影响了作用域。