C语言--浅谈C中static的作用

tip.以下static仅为鄙人一点认知,希望各位能给提出宝贵的意见!

在引入static之前,我们先来看一看c语言中的存储空间:

(这些在后面会被用到)

static可用来修饰:

1.局部变量

2.全局变量

3.函数

1.局部变量

我们先来看一看没有static修饰时的函数:

 运行结果:

 很明显,十个1,因为a为局部变量被存在了栈区。使用完一次后被销毁,之后再进入test函数时,又重新创建变量a,如此循环10次,运行10次test函数,于是就出现了10次1.

当我们用static修饰局部变量a时:

 运行结果:

 我们可以看到,1-10被打印了出来。

这是因为static将变量a从局部变量变成了静态变量,将a存储到了静态区,与全局变量有了相似的特征。我们知道全局变量的生命周期是伴随一整个工程的。所以在test函数执行完一遍后a不会被销毁,在下次调用时仍维持上次的值。

2.全局变量

仍然先看不被static修饰时的情况:

创建两个源文件,一个创建全局变量,一个使用全局变量。

 在另一个源文件引用全局变量时要用extern声明一下。

运行结果:

全局变量a成功被引用。

 当用static修饰时:

 结果为:

a无法被引用。

一个全局变量 在整个工程的其他文件内部能被使用,是因为全局变量具有外部链接的属性,而当一个全局变量被stati修饰时,这个全局变量的外部链接属性就变成了内部链接属性,使得这个全局变量只能在自己所在的源文件使用,其他文件不能再被使用。static修饰全局变量,让其外部链接属性变成了内部链接熟悉,从而使它的作用域变小了,而其生命周期不变。

3.函数

static修饰函数与修饰全局变量作用相似。同样,我们先来看没有static修饰时:

运行结果:

 使用外部函数成功;

当我们用static修饰时:

 

 和static修饰全局变量道理一样,

 函数本来也是具有外部链接属性的,被static修饰的时候就变成了内部链接属性,这个函数只能在自己所在的源文件内部使用,不能再其他文件使用。

总结:

1.当static修饰局部变量时,该变量被存到了静态区,因此其值在下次调用时仍维持上次的值;

2.修饰全局变量时,在本文件内的static全局变量内可以被模块内所用函数访问,但不能被模块外其它文件内的函数访问;

3.修饰函数时与修饰全局变量相同。只能在该文件内被调用,不能被外部文件调用。

感觉有用的老铁点个赞和关注再走啊!谢谢各位。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_w_z_j_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值