数据类型
这一章的主题是数据类型、链接以及内存管理。没错,C语言最重要的两个点中的第二个点--内存管理终于来了。果不其然,第一节都看了两天才算看懂一点。
重要概念: C语言是典型的面向过程语言,“对象”这个词跟Java那种面向对象语言是不同意思的。C语言中的对象就是单纯的存储在内存空间中的数据。
内存管理的意义: C语言之所以到现在还经久不衰,其中之一的原因就是它能够触及到底层,程序员可以掌控细致的内存的使用。在古早时期的计算机时代,计算机内存是极其匮乏的资源,所以管理内存十分重要。
存储期
数据在程序中,有很多种存在形式,其中一方面,就是它以及它所在的内存空间的生命周期。有些数据在程序正式运行之前,就被分配了内存,并且直到程序彻底结束才会从内存中被清除,而有些数据转瞬即逝。这就是存储期的概念。存储期分为静态存储期和自动存储期,静态存储期是整个C程序在运行过程中都存在的内存,自动存储期是在它生效的范围内才会被分配内存,一旦过了生效范围,系统自动会把它清除掉。
作用域
前面的学习中,有些变量是在写出main函数后马上就声明的,而有些变量是在循环内才声明的,走出这个循环,这种变量就不再起作用,这说明,不同类型的变量会在不同的范围内起作用,更确切的说,是在不同的作用域内才会被分配内存。作用域分为块作用域和文件作用域,文件作用域是整个C文件都可以访问,甚至外面其他C文件也可以访问。
C语言中,花括号{}括起来的区域以及单个循环范围内的代码被称为块,变量的作用域通常由它所在的块决定。块可以是函数,可以是循环。
链接
在之前的学习中,还没有接触过main文件之外的其他c文件一起编译做成程序,而实际编程中,一个项目通常由很多个C文件一起编译而成。那么文件与文件之间,就会有通用的变量(所有文件均可以操作和访问的变量),以及专属变量(单个C文件内才会起效)。这就有了链接的概念。
链接分为外部链接、内部链接和无链接。具有外部链接的变量是整个C程序的所有文件均可以访问的,只不过在它被定义的C文件之外的C文件里,需要用关键字extern来将它声明出来,才能使用。具有内部链接的变量只能在定义了它的C文件中被使用,不过可以被定义了它的C文件中的所有函数访问。无链接的变量只能被它所处的块内进行访问。
存储类别汇总
- 自动变量:具有块作用域、无链接、自动存储期。通常就是函数、循环内声明的变量。
- 外部变量:在C文件中,独立于函数外直接声明的变量,具有文件作用域、外部链接、静态存储期,是整个C程序各C文件之间都会用到的变量。
- 内部链接的静态变量:在C文件中,独立于函数外直接声明的变量,但是前面有关键字
static,这意味着它专属于这个C文件内,具有文件作用域、内部链接、静态存储期。 - 块作用域静态变量:在函数块内部声明的
static变量,具有块作用域、无链接、静态存储期。
小结
这只是我作为一个初学者对存储类型的粗浅理解,想必学完后面的内容后会觉得这篇内容错误满满吧。