C中的局部静态变量范围[重复]

Posted

技术标签:

【中文标题】C中的局部静态变量范围[重复]【英文标题】:Local static variable scope in C [duplicate] 【发布时间】:2014-10-25 07:54:23 【问题描述】:

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

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 值存储在哪里。是像全局变量一样的静态变量。

【问题讨论】:

Is static is like global variable. 不!!!!使用寿命相同。可见度不同。 请先修正语法错误,再去哲学问题:) C 规范没有说明变量必须存储在哪里,只是局部静态变量的生命周期贯穿整个程序。但是,编译器通常将局部静态变量与全局变量一起存储。 还有那个代码有一个无限循环,请先处理这些事情 '很好奇你有void main(),它是非标准的,只在带有Microsoft C 编译器的Microsoft Windows 上有效,你有int fun() 并且不使用它的返回值。拥有int main(void)void fun(void) 会更正统——尽管如果你更改了它的签名,你必须在main() 之前定义或声明fun()(尽管诸如MSVC 之类的C89 编译器不介意隐式int 函数规则,但这是 25 年前的标准,15 年前的 C99 标准禁止函数的隐式声明)。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

它存储在哪里?static 变量存储在“数据段”或“数据存储器”中。

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

【讨论】:

以上是关于C中的局部静态变量范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript局部静态变量

局部变量 静态局部变量 全局变量与静态局部变量

java的静态内部类中定义的变量是全局的么?

变量与存储空间及其存储结构

全局变量局部变量静态全局变量静态局部变量在内存里的区别

静态存储变量STATIC有啥用举个例吧,好像和全局变量还有些联系啊