C中的局部静态变量范围

时间:2014-09-01 06:18:31

标签: c

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

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值的位置。是一个静态变量,如全局变量。

2 个答案:

答案 0 :(得分:3)

该函数在返回时不会在i内释放fun()i的存储与全局变量位于同一区域 - 但它不是全局变量。它只能在定义它的函数fun()内访问。它与任何全局变量i或在任何其他函数(在任何源文件中)内是静态的任何其他变量i分开,或者与源中的文件范围静态变量i分开文件中定义了fun()。它只有程序一生。

答案 1 :(得分:1)

据我所知,该函数将在返回 - 后解除分配。我认为你的假设是错误的!

从函数返回后,

static个变量不会被释放。

它存储在哪里? - static个变量存储在&#34;数据部分&#34;或&#34;数据存储器&#34;。

生命 - 当程序加载到RAM中时static变量的生命周期开始,并在程序执行完成时结束!