C中的局部静态变量范围


Local static variable scope in C

本问题已经有最佳答案,请猛点这里访问。

我有一个关于静态变量的简单问题。如果我在函数中声明了一个静态变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main()
{
    int k = 0
    while(k<=4)
    {
        fun();
        k++;
    }
}
int fun()
{
    static int i=5;
    i++;
    printf(Value %d\t", i);
    return 0;
}

如我所知,函数返回后将取消分配。但i值存储在哪里?是静态变量,类似于全局变量。


函数在返回时不会在fun()内释放ii的存储与全局变量位于同一个通用区域,但它不是全局变量。它只能在定义它的函数fun()中访问。它与在任何其他函数(在任何源文件中)内是静态的任何全局变量i或任何其他变量i分离,或与定义fun()的源文件中的文件范围静态变量i分离。它的生命周期和程序一样长。


如我所知,函数返回后将取消分配-不,我认为您的假设是错误的!

从函数返回后,不会释放static变量。

它存放在哪里?-static变量存储在"数据段"或"数据存储器"中。

Life—当程序加载到RAM时,static变量的寿命开始,当程序执行完成时结束!