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文件中使用。最终相当于影响了作用域。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值