static是标准c语言的关键字它是一个修饰符,它的作用有3个。
static修饰局部变量。
static修饰全局变量。
static修饰函数。
那么下面我们举例说明static的三个作用。
1.修饰局部变量
![](https://i-blog.csdnimg.cn/blog_migrate/084ac0c993f34eb67a81889c66206b78.png)
运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/d724b76a0f2fa2b55960e8e13e8912d1.png)
程序运行的结果是 z=4在屏幕上打印是输出4次原因是?
因为在函数xiaopan里面x=2是一个局部变量它的作用域就是在它所在的{}内出了{}它的生命周期就结束了,进入主函数循环上来,进入函数xiaopan,x再次被赋值为2。
为了解决x=2下次不再被赋值成为2我们引入statsic来修饰这个局部变量。
statsic int x=2;
如图代码
![](https://i-blog.csdnimg.cn/blog_migrate/9eff93263068acfd5e1f928ada47ee09.png)
![](https://i-blog.csdnimg.cn/blog_migrate/797bcb6542253296f91f7765b8313c49.png)
可见用static来修饰局部变量后它的生命周期被延长了。
2.修饰全局变量
如图我们在同一个c工程的不同源文件下定义一个全局变量
![](https://i-blog.csdnimg.cn/blog_migrate/58aa1d863d7d9f72b8ab3e0adef6748f.png)
现在我们使用这个全局变量
![](https://i-blog.csdnimg.cn/blog_migrate/357e742863cd8f8d508ffaafc78d6c51.png)
注意使用这个A变量的时候 需要声明一下用extern(声明外部符号)
那么这个小程序可以完美运行。
![](https://i-blog.csdnimg.cn/blog_migrate/cac183d49ca7d3bf2e4d383c62a12fd6.png)
接下来我们用static修饰一下这个全局变量A static int A=100;
![](https://i-blog.csdnimg.cn/blog_migrate/f47dbf8e8cd797a636dc3c2c1efc8f14.png)
在回头看程序
![](https://i-blog.csdnimg.cn/blog_migrate/066fda1c42343e3831fccf18570f3f06.png)
直接报错了,这就是用static修饰变量的结果它改变了全局变量的作用域,只能作用域于当前源文件下我们浅浅验证一下,回到定义变量A的源文件下。
![](https://i-blog.csdnimg.cn/blog_migrate/e843c2775834390c16511fdb3157c60d.png)
程序完美运行可见static改变了全局变量的作用域
修饰函数
![](https://i-blog.csdnimg.cn/blog_migrate/44d558856554f3bdd1fa9b42930095bf.png)
如图我们定义了一个函数然后我们在不同的源文件下调用它。
![](https://i-blog.csdnimg.cn/blog_migrate/5862579fcaedeb270e95246368c6a249.png)
我们在另外一个源文件下成功调用了函数ADD下面我们用static来修饰这个函数
![](https://i-blog.csdnimg.cn/blog_migrate/4a8ffd46daf998be77342213d8e808c1.png)
回头看程序
![](https://i-blog.csdnimg.cn/blog_migrate/5c7bc7324c50c52451141ea9352aac8d.png)
这个时候函数不能被调用了static的作用就是:使得函数的外部链接属性变成内部链接属性,用大白话说就是没有被static修饰之前在整个工程内都可以使用函数,一旦被static修饰过就是只能在函数所在的源文件下使用。
总结以上就是static的三个作用
static修饰局部变量的作用就是局部变量的生命被周期延长。
static修饰全局变量改变了它的作用域只能在当前源文件下不是整个工程。
static修饰函数只作用域当前源文件下从外部来链接属性变成内部链接属性。