C语言变量分类

按照变量的定义位置分类,在函数外部定义的变量为 全局变量 或者 外部变量;在函数内部定义的变量为 局部变量

在不加修饰的情况下,全局变量的作用域是定义以下的整个文件,局部变量的定义域是定义以下的所在函数体。在函数内访问变量时,优先查找局部变量,所以如果局部变量与全局变量同名,局部变量会“遮蔽”全局变量。

全局变量的存储位置是静态存储区,不加修饰的局部变量的存储位置是动态存储区。

上文中的“修饰”是指在定义变量时通过添加额外的关键字来改变变量的特性,不加修饰或者用 auto 修饰的变量称为 自动变量

const 修饰符将一个变量声明为 常变量。常变量是只读的,只能在定义时进行赋值(如不赋值则编译器默认初始化为 0)。const 不改变变量的存储位置,也就是说,全局常变量仍然存储在静态存储区,局部常变量仍然存储在动态存储区(这使得局部常变量可以通过指针间接修改)。

extern 修饰符的作用是扩展一个全局变量的作用域(不能修饰局部变量),将作用域扩展到定义点之前或者其他文件里。使用 extern 时,我们没有定义新变量,只是进行了声明。

static 修饰符的作用是将变量声明为 静态变量,静态变量存储在静态存储区中,即使它本身是定义在函数之中的局部变量,这使得我们可以保存函数的局部变量,在下次调用时继续使用。static 不改变变量的作用域,静态局部变量的作用域仍然只在对应函数之内。特别的,全局变量如果被 static 修饰,就失去了被其他文件 extern 的能力,只能在本文件中生效。

register 修饰符的作用是直接将变量定义在寄存器而非内存中,这类变量叫做 寄存器变量。寄存器变量的使用能够提高程序的运行效率,但是大量的使用寄存器变量可能会填满寄存器,反而降低运行速度!更不能用 register 修饰全局变量,否则它们会一直占据寄存器空间,造成资源浪费。

posted @   XYukari  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示