泡泡中文

最新网址:www.xpaozw.com
字:
关灯护眼
泡泡中文 > 程序媛养成计划 > 第四十一章 逆天改命的秘密

第四十一章 逆天改命的秘密

一切准备就绪后,老爹把他电脑屏幕投放在了投影仪上。

「上一周我们先聊了函数,知道了什么是函数,为什么要用函数以及如何使用函数,接下来又说到了变量的作用域、全局变量和局部变量。

最后说到关键字static能够帮局部变量逆天改命,让局部变量成为与天地同寿的存在,小弦子提出疑问,static是如何做到的,于是就引出了C语言的程序运行时在内存中分区。

C语言的程序运行时在内存中的分区按照内存地址从低到高一共分为:代码区、常量区、全局数据局、堆区、栈区,其中代码区和常量区已经介绍过了。

代码区存放的编译成机器语言的程序代码,CPU在执行程序的时候,会挨着挨着读取、执行,最后在程序结束的时候由系统释放。

常量区存放的是数字、字符、字符串等常量。至于什么常量,我们也用100块买薯片的例子来说明了。

这里要补充一点,有个神奇的关键字能够将一个变量变成一个常量,它就是const,如果一个变量在声明时被const修饰,那么这个变量就摇身一变,变成了一个常量。

这样的变量需要在声明时并对其初始化,一旦初始化完成后,这个变量就和其他常量一样不能再修改了,就像这样:

const int PICWIDTH = 50;

int const PICWIDTH = 50;

这两条语句表达的意义都是一样的,都是符合C语言规范的,你们可以选择一种自己喜欢的方式,不过两种方式都要认识,不然以后看到别人用另外一种方式还以为是人家用错了,那就糗大了。

被const修饰的全局变量,也就是全局常量也是放在常量区的。」

我和小弦子都都尝试了一下,如果声明一个被const修饰的变量不对其进行初始化,编译器会报错。如果初始化之后又对其进行赋值,依然会报错。

「第三个区:全局数据区,所有被static的变量和全局变量都是放在全局数据区的,这个区也是在程序结束以后由系统释放。

第四个取:堆区,使用这个区就需要我们自己申请使用内存了,并且还必须自己释放。如果申请了内存不释放,就会导致内存泄露。假设在一个死循环中不断申请内存并且不释放的话,那计算机秒秒钟就会因为内存耗尽卡死了。

申请内存的函数是malloc,释放是ree,都是由库函数提供的。

最后一个区:栈区,所有除static修饰的局部变量都是放在这个区的,包括被const修饰的局部常量。一旦一个局部变量脱离了作用域,那么系统就会在栈中将它无情的杀死。

而static之所以能够为局部变量逆天改命,就是因为被它修饰后的变量已经从栈区转移到了全局数据区,这个区里的数据要等到程序结束的时才会被释放,都是和天地同寿的存在。」

「哦哦,原来是这样哦……」

难怪老爹要这么大的力气给我们讲内存分区,原来就是为了这一句话服务。

「static除了有给局部变量逆天改命,它还有另外一个技能——隐身术。」

『加入书签,方便阅读』
热门推荐
死后直播:我竟在酆都成神让你变魔术,没让你变态你美食系统,给的全是破案任务?别人抢神兵,我靠杀猪刀逆袭战神重生65,女儿别怕,爹爹有系统重生摆烂高考结束,我有十万亿余额好感度刷爆,我能获取特殊能力启明的青春序曲重生后,我要让所有人后悔!
网站地图