这是对谭浩强版 变量 存储 和生命周期的总结
主要知识点有如下:
1.变量分为:
全局变量、局部变量
按照作用域的角度:可以这样划分这两种变量:
- 局部变量:
- 自动变量 Auto (就是最普通的我们用的局部变量 )
- 静态局部变量 )
- 寄存器变量 (register关键字,存储位置在CPU中 方便程序使用的时候 不必反复在内存中调入调出,但是现在编译器已经很智能了,可以自己检测到,就会把它们放在CPU中 编程人员一般不必自己定义)
- 全局变量
- 静态外部变量 (关键字 static ,写法与静态局部变量相同,但是出现的位置不同,以及用法不同)
- 外部变量(extern 关键字的,允许其他文件引用)
2.内存中供用户使用的存储空间分为:
- 程序区
- 静态存储区
- 动态存储区
数据主要是放在了静态存储区和动态存储区(这里按照变量值的存放位置来分类)
那么静态存储区和动态存储区各自放了哪些东西呢:- 静态存储区:
- 静态局部变量(函数内有效)
- 静态外部变量 (本文件内有效)
- 外部变量
- 静态存储区:
- 动态存储区
- 自动变量
- 形参!!感觉知道这个知识点对于理解 后面的指针有帮助
- 刚刚提到的寄存器变量,它是动态存储的,但是位置却不是内存中的动态存储区,而是CPU中
3、那么从变量的时间(生存期)来区分的话(就是动态存储还是静态存储)也可以对变量进行分类,主要是掌握生存期这个知识点:
- 静态存储:是程序整个运行时间都存在
- 即 静态局部变量、静态外部变量、外部变量
- 动态存储是调用函数时临时分配内存单元
- 即 自动变量、寄存器变量、形参
4.补充点:静态局部变量与静态外部变量的异同:
-
我自己的理解
- 同:它俩在定义的时候是一样的,按照变量的生存期都是静态存储的方式;
- 异:出现的位置不一样,静态局部变量是在函数体中的,这一点见名知意。
- 静态局部变量在使用的时候,只给它赋一次初值 ,以后再改变的时候每次变的那个值都会保留在内存中,对于阶乘等运算十分便利;
- 静态外部变量的出现,就是告诉操作系统,只有本文件可以使用这个变量,防止别的文件误用。
-
并不是因为加了static 才使这两个变量存放在内存中的静态存储区的。对于全局变量来说,都是在编译时分配内存的,都存放在静态存储区。
-
声明存储类型是变量作用域的扩展问题。