C语言变量的分类
局部变量
- 函数内部定义的变量
- 只在当前函数中访问使用
全局变量
- 全局范围内的函数使用
- 可以在任意函数中访问
同名变量的问题
- 不同函数中的局部变量可以同名
- 全局变量不能同名
- 当全局变量与局部变量同名时,优先使用局部变量
变量的作用域
- 变量的作用域指的是变量定义后可访问的范围
- 不同变量的作用域可以有重叠
- 不同名变量在重叠作用域内可以分别访问
- 在重叠变量域,只可访问最近定义的同名变量
局部作用域
代码块:从{开始到}结束的一段代码
变量只能定义在代码块的开始处(早期原则)
变量的作用域从定义开始到当前代码块结束
当变量的作用域结束后,变量不可用全局作用域
全局作用域:可在程序的各个角落访问并使用
文件作用域:只能在当前代码文件中访问并使用
全局变量的作用域可能被局部变量覆盖(同名)
工程开发中,全局变量通常以 g_作为前缀命名
生命期
不同变量的物理存储区间
- 在现在计算机系统中,物理内存被分为不同区域
- 区域不同,用途不同,不同种类的变量位于不同区域
- 全局数据区:存放全局变量,静态变量
- 栈空间:存放函数参数,局部变量
- 堆空间:用于动态创建变量
声明期:变量从创建到销毁的时间(合法可用的时间)
不同变量的生命期
全局数据区中的变量
程序开始运行时创建,程序结束时被销毁,整个程序运行期合法可用
栈空间中的变量
进入作用域时创建,离开作用域时销毁(自动)
局部变量
在函数调用返回后销毁
作用域与生命期无本质联系
- 作用域规则是语法层面对变量是否可访问的规定
- 生命期是二进制层面上变量存在于内存中的事件
.可能情况
- 作用域外无妨访问的变量,可能在其生命期中(静态局部变量)
- 作用域可访问的变量,可能已经被销毁(堆bianlaing)
- 生命期中的变量,可能无法访问(文件作用域全局变量)
静态变量
static 是C语言中的关键字
static 修饰局部变量创建于全局数据区(拥有程序生命期)
static 修饰全局变量只要文件作用域
static 局部变量只会初始化一次,作用域于普通变量无异
变量的生命期有变量存储位置决定
- static 将变量存储于全局数据区
auto 将变量存储于栈空间register 将变量存储于寄存器
本文介绍了C语言中的变量作用域,包括局部变量和全局变量,强调了同名变量问题和变量作用域的区别。同时,讨论了变量的生命周期,区分了声明期和不同变量的存储区域,如全局数据区、栈空间和堆空间。最后,详细阐述了静态变量的特性及其对变量生命期的影响。
906

被折叠的 条评论
为什么被折叠?



