变量作用域与生命周期

本文介绍了C语言中的变量作用域,包括局部变量和全局变量,强调了同名变量问题和变量作用域的区别。同时,讨论了变量的生命周期,区分了声明期和不同变量的存储区域,如全局数据区、栈空间和堆空间。最后,详细阐述了静态变量的特性及其对变量生命期的影响。

C语言变量的分类

局部变量
  1. 函数内部定义的变量
  2. 只在当前函数中访问使用
全局变量
  1. 全局范围内的函数使用
  2. 可以在任意函数中访问

同名变量的问题

  1. 不同函数中的局部变量可以同名
  2. 全局变量不能同名
  3. 当全局变量与局部变量同名时,优先使用局部变量

变量的作用域

  1. 变量的作用域指的是变量定义后可访问的范围
  2. 不同变量的作用域可以有重叠
  1. 不同名变量在重叠作用域内可以分别访问
  2. 在重叠变量域,只可访问最近定义的同名变量
局部作用域

代码块:从{开始到}结束的一段代码
变量只能定义在代码块的开始处(早期原则)
变量的作用域从定义开始到当前代码块结束
当变量的作用域结束后,变量不可用

全局作用域

全局作用域:可在程序的各个角落访问并使用
文件作用域:只能在当前代码文件中访问并使用
全局变量的作用域可能被局部变量覆盖(同名)
工程开发中,全局变量通常以 g_作为前缀命名

生命期

不同变量的物理存储区间

  1. 在现在计算机系统中,物理内存被分为不同区域
  2. 区域不同,用途不同,不同种类的变量位于不同区域
  1. 全局数据区:存放全局变量,静态变量
  2. 栈空间:存放函数参数,局部变量
  3. 堆空间:用于动态创建变量
声明期:变量从创建到销毁的时间(合法可用的时间)
不同变量的生命期

全局数据区中的变量

程序开始运行时创建,程序结束时被销毁,整个程序运行期合法可用

栈空间中的变量

进入作用域时创建,离开作用域时销毁(自动)

局部变量

在函数调用返回后销毁

作用域与生命期无本质联系

  1. 作用域规则是语法层面对变量是否可访问的规定
  2. 生命期是二进制层面上变量存在于内存中的事件
.可能情况
  1. 作用域外无妨访问的变量,可能在其生命期中(静态局部变量)
  2. 作用域可访问的变量,可能已经被销毁(堆bianlaing)
  3. 生命期中的变量,可能无法访问(文件作用域全局变量)

静态变量

static 是C语言中的关键字
static 修饰局部变量创建于全局数据区(拥有程序生命期)
static 修饰全局变量只要文件作用域
static 局部变量只会初始化一次,作用域于普通变量无异

变量的生命期有变量存储位置决定
  • static 将变量存储于全局数据区
  • auto 将变量存储于栈空间
  • register 将变量存储于寄存器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值