概念
- 作用域:可以被访问的程序范围,由定义变量语句的位置决定
- 生存期:变量从分配空间,到使用,最后释放存储空间的时间段,由其存储类型决定
- 存储类型:自动型(auto)、外部型(extern)、静态型(static)、寄存器型(register)
- 存储方式
- 静态:程序运行期间分配固定的存储空间,程序运行结束后才释放,如全局变量
- 动态:需要使用时才分配存储空间,使用结束后立即释放,如局部变量
- 程序运行时使用的存储空间
- 程序代码区:编译后的指令序列
- 数据静态存储区:全局数据和静态数据
- 数据动态存储区:
- 函数数据:返回地址、CPU现场、形参、临时变量
- 动态内存申请的数据
Tips
- 使用
extern
可将全局变量的作用域扩展到其定义之前或其他源程序文件
extern int a; //a的声明,扩充定义域
...
int a; //定义
- 外部变量与内部变量同名时,在内部变量的作用域中外部变量被屏蔽
- 静态局部变量(函数内定义的静态变量),在函数调用结束后仍将保留
- 静态变量的缺省值为0
- 可以将频繁使用的局部变量定义为寄存器变量
动态内存分配
void* malloc(unsigned int size)
,函数返回的地址没有表明存储空间的数据类型,必须进行强制类型转换void free(void* p)
,p为最近一次调用malloc()
的返回值