1.静态存储方式和动态存储方式
- 静态存储方式:在程序运行期间,系统对变量分配固定的存储空间。
- 动态存储方式:在程序运行期间,系统对变量动态地分配内存
- 动态存储方式更有效率,静态存储方式更具可靠性
2.用户内存空间
3.自动变量(auto variable)
- 函数中的局部变量
- 编译系统动态分配内存
- 主要是函数的形参和函数中定义的变量
- 函数调用时自动分配空间,结束调用时自动释放
- 例: auto int b = 3; //关键字auto可以省略
4.静态变量
用static声明静态局部变量和静态外部变量
用static声明静态局部变量
- 用途:希望函数中的局部变量的值在函数调用结束后不消失而保留原值,一般用于函数下一次调用
- 例: static int c=3;
- 存储单元在程序整个运行期间都不释放
- 只赋一次初值,并且在函数编译时进行
- 对其他函数不可见。
用static声明静态外部变量
- 用途:希望某些外部变量只限于本文件引用,而不能被其他文件引用。
- 多人合作的程序模块中,各人可使用相同名称的全局变量而不会相互影响。
- 无论是否加static,全局变量都是静态存储
- 例:
//文件file1.c中的内容为:
static int a; //静态外部变量定义
void main(void)
{……}
//文件file2.c中的内容为:
extern int a; //外部全局变量说明
int func (int n )
{ int i, y=1;
for (i=1; i<=n; i++)
y*=a; //引用文件外定义的全局变量
return y;
}
5.寄存器变量(register)
- 一般变量:使用时才由内存进入CPU。
- 寄存器变量:直接放入寄存器,有利于频繁读写的变量。
- 程序中定义寄存器变量对编译系统只是建议性(而不是强制性)的。
- 当今的优化编译系统能够识别使用频繁的变量,自动地将这些变量放在寄存器中。
6.外部变量(extern)
- 在一个文件内声明全局变量:
- 提前引用声明:在全局变量的定义点之前要引用该全局变量,则应该在引用之前用关键字extern。
- 在多文件的程序中声明外部变量:
- 外部变量声明:多个文件都要用到同一外部变量,在一个文件中定义,在其他文件中用extern进行声明。