1.概念解析
- 存储类:描述这个变量在何种地方存储
- 作用域:描述这个变量起作用的代码范围
- 生命周期:描述这个变量什么时候诞生及什么时候死亡
- 链接属性:描述这个变量(函数)能如何被链接
- 这四个概念从不同角度分析了c语言的不同规则
2.存储类
- 代码段:又叫文本段(.text)用存放程序中的代码(函数)
- 数据段:用来存储初始化为非0的全局变量、static修饰的局部变量
- bss段:用来存储初始化为0以及未初始化值的全局变量、static修饰的局部变量
- 堆内存:程序员手动申请,并存放数据到堆中
- 文件映射区(内核程序、裸机程序一般没这个概念):用来存储打开的文件
- 栈:用来存储普通的局部变量,以及函数调用传参
3.存储类关键字
- auto:auto只有一个作用,就是修饰局部变量。其实平时的局部变量本来就是auto的,只是省略了auto而已。说到底auto加不加效果都一样
- static:static有两种用法,而且两种用法没有任何关联
- 第一种用法是修饰局部变量,使其成为“静态全局变量”,作用是分配到了数据段/bss段,生命周期变永久罢了。实际效果就是一个函数被反复调用时,里面的局部变量值是有记忆的
- 第二种用法是修饰全局变量和函数,效果是修改链接属性为内链接,意思是只有当前c文件可以链接
- regist