1.auto
修饰的变量存储在栈区,只修饰局部变量
2.static
修饰的变量存储在静态区,既可以修饰局部变量也可以修饰全局变量
-
static修饰局部变量时,延长了局部变量的生命周期,如果局部变量没有初始化,其值为0,如果初始化,只能初始化一次
-
修饰全局变量,只能在本文件内使用(限制了全局变量的作用域)
3.extern
只修饰全局变量,存储在静态区
int a=10;
#include<stdio.h>
extern int a; //告诉编译器该变量已在其他文件定义过了
int main()
{
printf("%d\n",a);
return 0;
}
(程序可以由多个.c文件组成,但main函数只能有一个)
4.register
只修饰局部变量,存储在寄存器中,建议把变量存储在寄存器,可以提高程序的运行速度,最终是否存储在寄存器中,取决于编译器,如果没有寄存器,存储在栈区。
5.总结
- 除了static和register修饰的局部变量外,其他的都存在栈区
- 全局变量存储在静态区
- 静态变量存储在静态区(static修饰的变量就是静态变量)