深入解析静态局部变量与自动变量的存储分配、作用域及生存期

下面是我整理的以上三种用法的解释。另外,网友xiaocai0001的文章《静态用法总结》有更详细的解释,请参考。

深入解析静态局部变量与自动变量的存储分配、作用域及生存期

静态局部变量(与 auto 相比)

1. 存储空间分配、范围和生命周期

static分配在静态存储区域中,作用范围仅限于声明该变量的函数内。在程序的整个运行过程中不会被释放,生存期贯穿于程序运行的整个过程。

auto类型分配在栈上,属于动态存储类别。它占用动态存储区域,其范围仅限于声明该变量的函数。函数调用结束后自动释放,生存期仅在声明该变量的函数内。

2. 赋初值时的处理方法

static静态局部变量在编译时被赋初值,即初值只赋一次;

auto自动变量的初值赋值是在函数调用时进行的。每次调用该函数时,都会重新赋值初始值,相当于执行了一条赋值语句。

3. 没有赋初值时如何处理

如果定义局部变量时没有赋予初始值:

static 静态局部变量在编译期间会自动分配初始值 0(对于数值变量)或空字符(对于字符变量)。

Auto自动变量,如果不指定初始值,则其值为不确定值。

静态外部全局变量

在C语言中,static也用于声明静态外部全局变量,那么这个全局变量的作用域就限制在本文件内。

外部变量(即全局变量)是在函数外部定义的,其作用域从定义该变量的地方开始,到程序文件末尾。如果外部变量没有在文件开头定义,则其有效范围仅限于定义点到文件末尾。如果定义点之前的函数要引用外部变量,则应使用关键字 extern 为引用之前的变量进行“外部变量声明”。表示该变量是已定义的外部变量。通过这个声明,外部变量从“声明”点就可以合法使用了。

而如果我们声明的全局变量不希望被其他文件访问和使用怎么办?

也就是在声明前面加上static关键字。

静态外部函数

在C语言中,我们的函数默认是全局的,这意味着你可以调用其他文件中的函数。使用时我们只需像以前一样在头文件中添加extern即可。但有时候我们写的函数不希望被其他文件访问和调用,所以我们在声明函数的时候就在函数前面加上static即可。

使用内部函数有两个好处:

1.可以防止某些内部函数被别人使用,只允许调用者使用他能使用的,这样有利于保护代码。

2.当不同的人编写不同的函数时,不必担心自己定义的函数是否与其他文件中的函数同名。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读