static修饰局部变量,全局变量,函数区别

✨前言✨ 

        这个系列作为【全网最强】的续作,在内容上不会只是走马灯式的浏览知识点,而会对各个知识点进行精讲精析,达到真正熟练的地步。虽然说博主学习C语言不过两个多月,但也熟知重难点和易错点,会和大家一起分享学习。关注博主🍻,在学习C语言的路上结伴前行吧!


 一、static修饰局部变量

①认识局部变量:

        局部变量创建在栈区上。栈区上数据的特点是入栈创建出栈销毁,所以说局部变量的作用域仅在相应代码块内,因为出代码块时被销毁。

 ②static修饰局部变量 ⭐

       static实际修改了局部变量的存储类型,将原本应该存储在栈区的局部变量存储在静态区。静态区上数据存储的特点是,程序结束变量才被释放。我们常见的全局变量就是存储在静态区上。现在我们分析static修饰后作用域和生命周期的变化:

  1. 【作用域】:作用域不变,只是出作用域不被销毁
  2. 【生命周期】:生命周期变长,程序结束生命周期才结束

 

 ③栈区静态区存储特点:

栈区

①在执行函数时,函数局部变量的存储单元都可以在上创建,函数执行结束时这些存储单元自动被释放

②栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(栈溢出问题)

③ 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。

向下增长指从栈依次申请的地址在减小

数据段

(静态区)

①存放全局变量、静态数据。

②程序结束后由系统释放

二、static修饰全局变量

①全局变量为什么具有全局属性

 答:因为全局变量具有链接属性。在编译阶段会被添加到符号表中,在链接阶段对其进行解析和符号重定位

②static修饰全局变量⭐

作用:改变了全局变量的链接属性

作用域: 作用域变小,仅仅局限在当前文件下

生命周期:生命周期没变,因为全局变量任然存储在静态区上。

 说明了全局变量的链接属性被修改,全局变量的使用仅仅局限于本文件

三、static修饰函数

        函数和全局变量一样具有全局属性,但被static修饰后全局属性消失,在编译阶段不会被添加到符号表中,从而使用仅仅局限于本文件中。

四、static的意义 

  1. static 修饰全局变量与函数,实际改变了原有链接属性,使得全局变量与函数被隐藏在本文件,只能在本文件中访问。解决了不同源文件中函数名、变量名冲突的问题,有效降低了程序模块之间的耦合,
  2. static 修饰局部变量,本质是将变量的存储区域改至静态存储区,从而延长了变量的生命周期,程序在走出函数时变量并没有被销毁,直到下次调用函数,变量依然保持原值,并且不再被初始化;从另一方面来看,这本身也是一种隐藏,将变量隐藏在函数中,变量只能在函数中访问,却存在于整个程序。
  3. static 修饰变量还有一特点,当变量未初始化时,默认初始化为 0。这是因为在静态存储区,所有内存都被默认置为 0,有时这一特点可减少工作量。

  • 46
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

罅隙`

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

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

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

打赏作者

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

抵扣说明:

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

余额充值