一、从变量作用域角度划分,变量可分为局部变量和全局变量。
1、局部变量是定义与函数内的变量,作用域是其定义时所在大括号范围内,出了作用域其占用的内存单元就会被释放掉。
2、全局变量是定义于函数外的变量,作用域是从定义位置开始直至文件末尾。(一般为了易于区分,将全局变量首字母大写)。
3、局部变量a可以与全局变量a同名,在局部变量作用域中,同名全局变量会被屏蔽,即引用a是使用局部变量。(强龙难压地头蛇)
二、从变量生存期角度划分,可分为动态存储方式和静态存储方式
内存中用户区存储空间可分为三部分:
程序区、
静态存储区(全局变量)、
动态存储区(函数参数、函数中的自动变量、函数调用时的现场保护和返回地址等)
局部变量有两种存储方式:
1、在前面加上static,使用静态存储方式:编译时进行初始化,函数结束后不释放内存单元,一直保持已有的值。下一次调用时不执行初始化语句,继续使用之前保留的值。
2、在前面加上auto(前面什么都不加就是默认auto),使用动态存储方式,函数调用时初始化并分配存储空间,函数结束时释放存储空间。
全局变量都使用静态存储方式
外部变量(全局变量)的作用域:
一个C程序包含多个源程序文件时,不同文件不能命名同名的外部变量。
1、文件2引用文件1中外部变量的方法:
file1.c
int A;
...
file2.c
extern A;//将file1中已定义的外部变量的作用域扩展至本文件
...
2、将外部变量作用域限制在本文件中,只需加上static即可
static int A;
这叫静态外部变量