代码区、常量区、静态区(全局区)、堆区、栈区
代码区、常量区、静态区(全局区)、堆区、栈区?
参考:https://blog.csdn.net/u014470361/article/details/79297601

局部静态变量
局部静态变量存储在全局区,与全局变量相同,它仅仅在编译时初始化,存储地址不变,与局部变量相比,它在函数执行结束后仍然存在,
static int a;
int c;
void test(void)
{
    static int b=1;
    b++;
    printf("b:0x%p: %d\n", &b , b);
}
int main()
{
    printf("a: 0x%p: %d\n", &a , a);
    printf("c: 0x%p: %d\n", &c , c);
    for(uint8_t i=0;i<5;i++)
    {
        test();
    }
    return 0;
}
执行结果:

可见,局部静态变量b只在编译时初始化一次,后面在for循环中的四次初始化无效,每次都只是调用前一次的值,函数执行完毕后内存不释放,但它既然是局部,那么就是不可见的,其他函数无法调用它。
静态全局变量和全局变量
在上面我们知道,局部静态变量的作用域是在它所处的函数内,而全局静态变量和全局变量又有何不同呢?与全局变量相比,全局静态变量的作用域限制在它的源文件,当一个程序又多个源文件构成时,全局及港台变量无法跨文件使用,但全局变量可以,只需要加上extern关键字。
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号