C++理论梳理5——变量的作用域和生命周期

C++理论梳理5——变量的作用域和生命周期

  1. 作用域就是一个变量可以被引用的范围,如:全局作用域、文件作用域、局部作用域
  2. 生命周期就是这个变量可以被引用的时间段
  3. 变量的作用域和生命周期本质是内存管理问题,一个程序的内存分为代码区、全局数据区、堆区、栈区等
  4. 若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
  5. 若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;

全局变量

  • 作用域:全局作用域(全局变量只需在一个源文件中定义,其他源文件声明即可使用,详见声明与定义
  • 生命周期:程序运行期一直存在
  • 引用方法:其他文件对要使用的全局变量进行extern关键字声明。
  • 内存分布:全局数据区
  • 注意:如果在两个文件中都定义了相同名字的全局变量,连接出错:变量重定义
int i;		//声明并定义
extern int i;	//声明
extern int i=10; 		//定义

全局静态变量

  • 作用域:文件作用域(只在被定义的文件中可见)
  • 生命周期:程序运行期一直存在
  • 内存分布:全局数据区
  • 定义方法:static关键字,const 关键字
  • 注意:只要文件不互相包含,在两个不同的文件中是可以定义完全相同的两个静态变量的,它们是两个完全不同的变量

局部变量

  • 作用域:局部作用域(只在局部作用域中可见)
  • 生命周期:程序运行出局部作用域即被销毁 ,如函数内部
  • 内存分布:栈区

静态局部变量

  • 作用域:局部作用域(只在局部作用域中可见)。
  • 生命周期:程序运行期一直存在
  • 内存分布:全局数据区
  • 定义方法:局部作用域用中用static定义 (比如用于:被调函数返回指针:此时用static定义的变量在函数调用结束后不释放,可将该static变量的地址作为返回值)
  • 注意:只被初始化一次,多线程中需加锁保护

猜你喜欢

转载自blog.csdn.net/IHTY_NUI/article/details/109088354