美文网首页
静态本地变量

静态本地变量

作者: 爱生活_更爱挺自己 | 来源:发表于2020-11-10 18:47 被阅读0次

    静态本地变量

    • 在本地变量定义是加上static修饰符就成为静态本地变量
    • 当函数离开的时候,静态本地变量会继续存在并保持其值
    • 静态本地变量的初始化在第一次进入这个函数时做,以后进入函数时会保持山上次离开时的值
    #include<stdio.h>
    
    int f(void);
    
    int main(int argc, char const *argv[])
    {
        f();
        f();
        f();
        return 0;
    }
    
    int f(void)
    {
        static int all = 1;
        printf("in %s all=%d\n", __func__, all);
        all += 2;
        printf("agn in %s all=%d\n", __func__, all);
        return all;
    }
    
    in f all=1
    agn in f all=3
    in f all=3
    agn in f all=5
    in f all=5
    agn in f all=7
    

    • 静态本地变量实际上是特殊的全局变量
    • 他们位于相同的内存区域
    • 静态本地变量具有全局的生存期,函数内的局部作用域
      • static在这里的意思是局部作用域(本地可访问)
    #inlcude<stdio.h>
    
    int f(void);
    
    int gAll = 12;
    
    int main(int argc, char const *argv[])
    {
        f();
        return 0;
    }
    
    int f(void)
    {
        int k = 0;
        static int all = 1;
        printf("&gAll=%p\n", &gAll);
        printf("&all =%p\n", &all);
        printf("&k   =%p\n", &k);
        printf("in %s all=%d\n", __func__, all);
        all += 2;
        printf("agn in %s all=%d\n", __func__, all);
        return all;
    }
    
    &gAll=00402000
    &all =00402004
    &k   =0060FEFC
    in f all=1
    agn in f all=3
    

    *返回指针的函数

    • 返回本地变量的地址是危险的
    • 返回全局变量或者静态本地变量的地址是安全的
    • 返回在函数内malloc的内存是安全的,但是容易造成问题
    • 最好的做法是返回传入的指针

    相关文章

      网友评论

          本文标题:静态本地变量

          本文链接:https://www.haomeiwen.com/subject/ywgjbktx.html