zoukankan      html  css  js  c++  java
  • C--静态变量和静态函数static

    1. 静态局部变量:

    #include <stdio.h>
    
    //在本地变量定义时加上static修饰符就成为静态本地变量 
    //当函数离开的时候,静态本地变量会继续存在并保持其值
    //静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值
    //静态本地变量的实质是特殊的全局变量 
    //静态本地变量具有全局的生存期,函数内的局部作用域
    
    void f(void) {
        static int a = 1;
    //静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0(局部变量不会被初始化);    
        //它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,也就是不能在函数体外面使用它
        a += 5;
        printf("%d
    ", a);
    }
    
    
    int main()
    {
        f();
        f();
        f();
    
        return(0);
    }

    c/c++的内存分布,以及static所在的区间:

    对于一个完整的程序,在内存中的分布情况如下图:

    1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用于退出而释放空间

    2.堆区:程序员分配并释放的区域,像malloc(c),new(c++) 

    3.全局数据区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放

    4.代码区

    2.静态全局变量:

    全局变量、静态全局变量这两者在存储方式上并无不同,区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它

     

    3.静态函数: 

    准确的说,静态函数跟静态全局变量的作用类似 

    
    
    static函数与普通函数的区别是:用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说它可以被其它代码文件调用

    定义静态函数有以下好处:
      <1> 其他文件中可以定义相同名字的函数,不会发生冲突。
      <2> 静态函数不能被其他文件所用。

     

     

     

  • 相关阅读:
    vue使用腾讯地图选点组件问题总结
    腾讯位置服务实现点击建筑显示围栏及建筑信息效果
    unity使用UMP播放RTSP流,打包exe后显示空白
    uniapp获取context
    Android studio安装debug apk提示“调用者不被允许测试的测试程序”
    unity使用VuplexWebView内嵌浏览器遮挡前方按钮的问题
    unity透明材质上放3dtext不同角度,文字变灰的问题
    Python线程指南
    mysql 简单表和索引
    dubbo 提示 403 unknown user
  • 原文地址:https://www.cnblogs.com/liming19680104/p/13375619.html
Copyright © 2011-2022 走看看