✨前言✨
这个系列作为【全网最强】的续作,在内容上不会只是走马灯式的浏览知识点,而会对各个知识点进行精讲精析,达到真正熟练的地步。虽然说博主学习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,有时这一特点可减少工作量。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)