1.生存周期不同 全局变量:全局区(静态区)(static):全局变量和静态变量是存储在一起的,初始化过的全局变量和静态变量在同一块区域,未初始化的全局变量和静态变量存放在一块相邻的区域内。此区域由系统在程序结束后释放 局部变量: 放在堆栈中。由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈
2.作用范围不同 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回
3.静态变量分为 全局静态变量(常称为全局变量)和局部静态变量(static修饰的变量)
using namespace std;
static int var1 = 0;//局部静态变量,虽然位置在函数体外
static int var2;//同上,局部静态变量
int var3 = 0;//全局静态变量
int main(int argc, char const *argv[])
{
int var4 = 3;//在text段
static int var5 = 1;//局部静态变量
return 0;
}