C语言变量分类
按照变量的定义位置分类,在函数外部定义的变量为 全局变量 或者 外部变量;在函数内部定义的变量为 局部变量。
在不加修饰的情况下,全局变量的作用域是定义以下的整个文件,局部变量的定义域是定义以下的所在函数体。在函数内访问变量时,优先查找局部变量,所以如果局部变量与全局变量同名,局部变量会“遮蔽”全局变量。
全局变量的存储位置是静态存储区,不加修饰的局部变量的存储位置是动态存储区。
上文中的“修饰”是指在定义变量时通过添加额外的关键字来改变变量的特性,不加修饰或者用 auto 修饰的变量称为 自动变量。
const 修饰符将一个变量声明为 常变量。常变量是只读的,只能在定义时进行赋值(如不赋值则编译器默认初始化为
extern 修饰符的作用是扩展一个全局变量的作用域(不能修饰局部变量),将作用域扩展到定义点之前或者其他文件里。使用 extern 时,我们没有定义新变量,只是进行了声明。
static 修饰符的作用是将变量声明为 静态变量,静态变量存储在静态存储区中,即使它本身是定义在函数之中的局部变量,这使得我们可以保存函数的局部变量,在下次调用时继续使用。static 不改变变量的作用域,静态局部变量的作用域仍然只在对应函数之内。特别的,全局变量如果被 static 修饰,就失去了被其他文件 extern 的能力,只能在本文件中生效。
register 修饰符的作用是直接将变量定义在寄存器而非内存中,这类变量叫做 寄存器变量。寄存器变量的使用能够提高程序的运行效率,但是大量的使用寄存器变量可能会填满寄存器,反而降低运行速度!更不能用 register 修饰全局变量,否则它们会一直占据寄存器空间,造成资源浪费。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!