【c语言】关键字static三种用法

1,static修饰局部变量

无static

static修饰的局部变量

作用域(限定这个名字的可用性的代码范围)

局部变量的作用域在函数代码块内,即变量所在的局部范围,static修饰后仍然是局部变量作用域不变

根本原因(存储位置改变,执行效果不一样)

普通的局部变量存储在栈区

存储位置改变,在静态区

生命周期(变量从创建到销毁的一个时间段)

局部变量进入作用域生命周期开始,出作用域生命周期结束

生命周期边长,变量创建后,之后不再执行变量初始化那句话了,变量直到程序结束才销毁

2,static修饰全局变量

无static

static修饰的全局变量

根本原因

全局变量本身具有外部链接属性,A文件定义,B文件链接使用,用extern声明外部符号

全局变量的外部连接属性变成内部链接属性,只能在自己的文件使用,别的文件看不到了,extern没用了,一个无法解析的外部符号

作用域(一段程序代码中所用的名字并不总是有效可用的,作用域是限定这个名字的可用性的代码范围)

全局变量的作用域是整个工程,项目,可以用extern声明

全局变量的作用域变小了

外部连接属性:一个工程只能生成一个可执行程序,test.c源文件在经过编译和链接后,会生成可执行程序后缀.exe,在链接的过程中就是在其他文件中找需要的符号。

3,修饰函数

根本原因:函数本身具有外部连接属性,static修饰导致外部链接属性变成内部链接属性,导致了static修饰的函数作用域变小了。

最后,总结static三种用法:(因为static修饰全局变量和函数的原因是同一个,我们可以合并理解)

原因

用法

static修饰局部变量

static修饰局部变量时,根本原因是局部变量的存储位置由栈区到了静态区,导致static修饰的局部变量生命周期边长。

当我们函数的局部变量想产生累计的效果,每次进入函数时,变量的值不被重新初始化,而是上次使用过后的值,我们可以用static修饰函数内的局部变量。

static修饰全局变量和函数

而static修饰全局变量和函数时,根本原因都是因为他们的外部连接属性变成了内部链接属性,导致他们的作用域变小,从而产生无法解析的外部符号的警告。

当我们只想在当前文件使用全局变量和函数时,不想被其他文件看见时,可以用static修饰全局变量和函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员婧子的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值