变量从变量值存在的空间角度(作用域)可以分为局部变量和全局变量,从时间角度(存储器)可以分为静态存储和动态存储。
局部变量
- 声明在函数内。
- 只有在函数运行时才会存在。
全局变量
- 声明在函数外。
- 任何函数都可以在任意时刻访问。
自动变量
- 自动变量是动态存储方式。
- 一般以数据类型加上变量名的方式定义变量得到的是自动变量(默认 auto 关键字)。
- 自动变量的生命周期是由函数的生命周期所决定,即函数执行完毕自动变量便销毁。
- 自动变量包括函数形参和非static局部变量。
- 动态分配存储空间,存储在动态存储区中。
- 只在定义它们的时候才创建,在定义它们的函数返回时系统回收变量所占存储空间。对这些变量存储空间的分配和回收是由系统自动完成的。
静态变量(static 变量)
- 静态变量是静态存储方式。
- 定义变量时,在数据类型之前加上 static 得到的便是静态变量。
- 静态变量的生命周期是由整个程序所决定,即程序执行完毕时静态变量才销毁。因为静态变量储存在静态数据区,而函数是储存在栈中,函数执行完毕后栈销毁,不会影响到静态变量的值。
总结
1.定义局部变量时没有static,是自动变量;
2.定义局部变量时加static,是静态变量。局部静态变量的初始化语句在第一次进入该block时执行一次,以后再进入不再执行该初始化语句;
3.全局变量是静态变量(无论有没有加static);
4.定义全局变量时加static,是限制它不会被别的文件引用;
5.定义局部自动变量时,若没有初始化,则它的初始值是不确定的;定义静态变量(全局变量、局部静态变量)没有初始化,则其初始值为0.