zoukankan      html  css  js  c++  java
  • 程序结构之静态本地变量

    静态本地变量:

    • 在本地变量定义时加上static修饰符就成为静态本地变量

    • 当函数离开的时候,静态本地变量会继续存在并保持其值

    • 静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值

    实例:

    #include <stdio.h>
    int main(int argc,char const *argv[]) {
        f();
        f();
        f();
        return 0;
    }
    
    int f() {
        static int all;
        printf("%d
    ",all);
        all += 1;
        return all;
    }

    运行结果:

    0
    1
    2
    •  静态本地变量实际上是特殊的全局变量

    • 它们位于相同的内存区域

    • 静态本地变量具有全局的生存期,函数内的局部作用域(只能在定义它的函数内访问)

      • static在这里的意思是局部作用域(本地可访问)

    实例:

    #include <stdio.h>
    int gAll = 10;
    int main(int argc,char const *argv[]) {
        f();
        return 0;
    }
    
    int f() {
        int k=0,j=0;
        static int all;
        printf("&gAll = %p
    ",&gAll);  //%p输出指针值,以16进制输出,32位平台输出4个字节,64位平台输出8个字节
    printf(
    "&all = %p ",&all); printf("&k = %p ",&k); printf("&j = %p ",&j); return all; }

    运行结果:

    &gAll = 0x80496c0
    &all  = 0x80496c8
    &k    = 0xff92a6f4
    &j    = 0xff92a6f0

    观察可发现静态本地变量和全局变量在同一快内存区域放着,也就解释了上面的例子中 all 未初始化的默认值是 0 ,一般本地变量在另一块内存放着,很容易理解了。

  • 相关阅读:
    Vue-router笔记
    webpack及其配置
    高阶函数+组件化开发
    Es6语法+v-on参数相关+vue虚拟dom
    英语资源及其APP推荐
    Qt获取ip地址
    QT创建和使用动态链接库
    error C2664: “strcmp”: 不能将参数 1 从“WCHAR [260]”转换为“const char *”
    Vue|VUE router 导航重复点击报错的问题解决方案
    Vue|触发路由跳转
  • 原文地址:https://www.cnblogs.com/songbeyond/p/12505429.html
Copyright © 2011-2022 走看看