三种类型限定符
const
限定符: 这个是老朋友了,只要声明里带了他,那么就带来了永恒(哪怕只是一部分)。对于程序运行中不需要修改的数据,都应该用const
声明,另外,全局变量最好也用const
声明,除了那些需要修改的值,这样做是为了安全。
const
与指针: const
声明指针时,有两种用法,一是声明指向不可修改值得对象,另一个是声明不可修改所指对象的指针。这两个区分在于const是在const
前还是后,在const
前,则为前者,后则为后者。
volatile
限定符: volatile
限定符声明的数据,可以被其他程序访问(也就是不再局限于他原本所属的程序),最典型的就是时钟,多个程序都可以访问。
restrict
限定符: restrict
限定符目前的学习中,是用来专门与mollac()
创造的内存空间搭配使用的,用它声明的指针,并指向mollac()
创造的内存空间,那么它就是访问这个内存空间的唯一方法,这样做比较安全。
限定符的意义: const
表现了数据的恒常性,volatile
表现了数据的易变性,restrict
用于提高编译器的优化。
第十二章总结
内存是用于存储程序中的数据的,表征分为三个方面:存储期、作用域、链接。
- 作用域是决定变量能被程序的哪些部分访问。定义在所有函数外部的变量具有文件作用域(文件里所有函数都可以访问),在函数内部、循环内部具有块作用域。
- 链接是决定变量可以被其他文件里的函数访问与否,分为无链接、内部链接、外部链接。块作用域具有无链接,文件作用域可以拥有外部链接和内部链接,外部链接代表着其他文件的函数也可以访问这个变量,内部链接代表着只有声明它的文件里的函数才可以访问。
- 存储期是对象所处的内存的生命周期。类型分为:自动内存、静态内存、动态内存。自动内存是操作系统会自动进行分配和清理,当程序进入到一个变量的作用域,系统会自动分配其内存,离开这个变量的作用域后,系统自动清理这些内存;静态内存是在程序编译时就决定好的,在程序启动时就被分配了内存,并且直到程序结束才会被系统清除掉;动态内存是在程序运行过程中由程序本身产生的,要用到
malloc()
来创造根据用户需求的内存空间,这些内存除非程序停止使得系统强制清理,不然只能通过free()
函数来清理,它的产生和清除是由程序来决定。
特别注意: 内存管理,特别是动态内存的管理,对于不需要再使用的内存,一定要及时清理掉,不然会容易导致内存泄漏。