打印
[MM32生态]

C语言 静态局部变量的作用机制,及用法

[复制链接]
1086|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2024-5-24 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
静态局部变量
在之前介绍C语言的局部变量和全局变量的时候说过,C语言的作用域的内容其实是很多的,当时只是介绍了一般变量的作用域,这一节将介绍一下静态局部变量的作用和用法。而什么是静态局部变量呢?

可以这样理解,C语言中,静态局部变量一般就是指通过static定义的局部变量,而局部变量则一般是在特定作用域内可以访问的变量,比如函数体内、if条件判断代码块内、循环体内等等。

静态局部变量定义语法
static type varName = value;

静态局部变量的初始化
第一,C语言中,静态局部变量如果没有显式初始化,那么编译器会自动为其初始化为0或与0相关的值,比如如果是空字符则为'\0'。

第二,从程序开始执行到结束,静态局部变量的初始化通常只有一次——这该怎么理解呢?这就要说说静态局部变量的作用机制了。

静态局部变量的作用机制
首先,C语言的静态局部变量的内存是分配在静态存储区,而不是像其它的一般的普通变量那样存储在栈上,静态存储区上的静态变量的内存空间在程序整个执行期间都不会被释放,比如普通局部变量在函数调用完之后栈上的空间就会释放,而静态变量则不会,该类型的变量会在程序执行开始完成空间的分配,并在结束的时候自动释放;

其次,C语言的静态局部变量只会被初始化一次,即便之后在程序执行期间被修改了(比如在循环之中被修改了),也仍然不会再次被初始化;

C语言静态局部变量通常情况下虽然会在程序执行期间一直存在,但其仍然是局部变量,其作用域一般仍然会被限制在局部范围内,但就像之前数组返回值的时候介绍的,可以通过返回指针的方式,引用静态局部变量的内存地址;

静态局部变量的一些用法
如果有实际编程开发的经验(不仅限于C语言),那么应该就可以通过静态局部变量的作用机制来联想到一些可能的用法,比如:统计某些程序被调用执行的次数、统计递归的深度等等。除此之外,因为C语言是高性能的编程语言,且静态局部变量只初始化一次,因此,通过静态局部变量可以高效地为一些较大的数组或结构体进行初始化。

静态局部变量实例代码
通过静态局部变量来设计返回数组的函数的用法,在之前的章节中已经介绍过了(可参考上面的链接),这里就不再赘述了,这里主要展示一下在for循环中,静态局部变量只初始化一次的作用(如果不是静态局部变量,那么每一次都将被初始化,那么每一次输出的值都将是0),实例代码如下:

#include "stdio.h"

int main() {
    for(int i=0; i<5; i++){
        static int j = 0;
        printf("%d\n",j);
        j += 2;
    }
   
    return 0;

}
代码编译运行后,得到输出:

0
2
4
6
8
免责声明:内容仅供参考,不保证正确性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1917

主题

6667

帖子

8

粉丝