【C语言知识精讲②】static修饰局部变量,全局变量,函数区别

【C语言知识精讲②】static修饰局部变量,全局变量,函数区别,第1张

【C语言知识精讲②】static修饰局部变量,全局变量,函数区别

✨前言✨ 

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

‍作者概况:  就读南京邮电大学努力学习的大一小伙

‍联系方式:2879377052(QQ小号)             

‍资源推荐:C语言从入门到进阶

‍今日书籍分享:  《C陷阱与缺陷》                   提取码:CSDN

‍gitee码云链接: Gitee仓库 test

参考书籍:《C缺陷与陷阱》

[有问题欢迎留言讨论,作者尽力帮忙]✨


 一、static修饰局部变量

①认识局部变量:

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

 ②static修饰局部变量 ⭐

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

作用域:作用域不变,只是出作用域不被销毁

生命周期:生命周期变长,程序结束生命周期才结束

 

 ③栈区静态区存储特点:

栈区

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

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

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

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

数据段

(静态区)

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

②程序结束后由系统释放。

二、static修饰全局变量

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

 答:因为全局变量具有链接属性

②static修饰全局变量⭐

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

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

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

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

三、static修饰函数

可以简化认为函数和全局变量一样具有全局属性,但被static修饰后全局属性消失,使用仅仅局限于本文件。

四、static的意义

【注:static意义这一节摘录于【C语言】关键字static详解 这一文章,大家也可以支持一下】 

1. static 修饰全局变量与函数,实际改变了原有链接属性,使得全局变量与函数被隐藏在本文件,只能在本文件中访问。解决了不同源文件中函数名、变量名冲突的问题,有效降低了程序模块之间的耦合,

2.  static 修饰局部变量,本质是将变量的存储区域改至静态存储区,从而延长了变量的生命周期,程序在走出函数时变量并没有被销毁,直到下次调用函数,变量依然保持原值,并且不再被初始化;从另一方面来看,这本身也是一种隐藏,将变量隐藏在函数中,变量只能在函数中访问,却存在于整个程序。

3. static 修饰变量还有一特点,当变量未初始化时,默认初始化为 0。这是因为在静态存储区,所有内存都被默认置为 0,有时这一特点可减少工作量。

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4752204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存