静态本地变量

静态本地变量

  • 在本地变量定义是加上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的内存是安全的,但是容易造成问题
  • 最好的做法是返回传入的指针
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容