C语言中的静态局部变量

发表于:2015年3月24日 19:21  分类:c 576次浏览

在C语言中,局部变量是存储在栈段中的,在进入函数后分配内存单元,在函数退出前释放占用的内存。如果在局部变量前加static就得到静态局部变量,静态局部变量存储在数据段中,在函数结束后仍然保存在内存中,再次调用函数时,继续调用之前的静态局部变量值。

 

 

 

 

测试程序:

main()
{
    int f(int);
    
    int a = 2, i;
    for(i = 0; i < 3; i++)
    {
        printf("%d\n", f(a));
    }
}

int f(int a)
{
    auto int b = 0;
    static int c = 3;
    b = b + 1;
    c = c + 1;
    return (a+b+c);
}

运行结果:
c-static-1

Debug查看静态局部变量c的内存位置:
c-static-2

因为静态局部变量定义在数据段,所以函数结束后c仍保存在内存中。
那么,可否在函数外部调用该静态局部变量呢?

测试程序:

int f(int a)
{
    auto int b = 0;
    static int c = 3;
    b = b + 1;
    c = c + 1;
    return (a+b+c);
}

main()
{   
    int a = 2, i;
    for(i = 0; i < 3; i++)
    {
        printf("f(a) = %d, static c = %d\n", f(a), c);
    }
}

Tcc编译结果:
c-static-3

发生错误:符号c没有定义。也就是说,虽然静态局部变量是定义在数据段中,但其他函数无法引用它。

发表评论

电子邮件地址不会被公开。 必填项已用*标注