C++全局变量、局部变量、静态全局变量、静态局部变量的区别
全局变量全局变量在函数外部定义作用域从定义位置开始到文件结束。全局变量存储在全局数据区生命周期贯穿整个程序运行期间。未初始化的全局变量默认值为0。全局变量可以被同一文件的其他函数访问通过extern声明也可被其他文件访问。intglobalVar;// 全局变量默认初始化为0voidfunc(){globalVar10;// 可访问}局部变量局部变量在函数或代码块内部定义作用域仅限于定义它的函数或代码块。局部变量存储在栈区生命周期随函数调用开始和结束。未初始化的局部变量值是随机的。局部变量不能被其他函数直接访问。voidfunc(){intlocalVar;// 局部变量值随机localVar5;}静态全局变量静态全局变量在函数外部定义且用static修饰作用域仅限于定义它的文件。静态全局变量存储在全局数据区生命周期贯穿整个程序运行期间。未初始化的静态全局变量默认值为0。静态全局变量不能被其他文件访问避免了命名冲突。staticintstaticGlobalVar;// 静态全局变量voidfunc(){staticGlobalVar20;// 仅本文件可访问}静态局部变量静态局部变量在函数内部定义且用static修饰作用域仅限于定义它的函数。静态局部变量存储在全局数据区生命周期贯穿整个程序运行期间但只能在函数内访问。未初始化的静态局部变量默认值为0。函数多次调用时静态局部变量会保持上一次的值。voidfunc(){staticintstaticLocalVar0;// 静态局部变量staticLocalVar;coutstaticLocalVarendl;}关键区别总结作用域全局变量跨文件需extern静态全局变量仅限文件局部变量限函数/代码块静态局部变量限函数但保持值。存储区域全局、静态全局和静态局部变量在全局数据区局部变量在栈区。生命周期全局、静态全局和静态局部变量为整个程序运行期局部变量随函数调用结束。初始化未初始化的全局、静态全局和静态局部变量默认为0局部变量值随机。