zoukankan      html  css  js  c++  java
  • C++中static用法详解

      作用
    1:修饰普通变量:
    2:修饰普通函数:
    3:修饰成员变量:
    4:修饰成员函数:
     
     
    一:c与c++共有的
    1:静态局部变量:用于函数内部修饰变量,这种变量的生存周期一直到程序关闭。
     
    int foo()
    {
        static int si = 1; //note:1
        int ci = 1; //note:2
        si += 1;
        printf("&si = %p	 si = %d	 &ci = %p	 ci = %d
    ", &si, si, &ci, ci);
        return si;
    }
     
    其中si的初始化,是在函数比调用的时候,才进行的初始化。
     
    静态局部变量与全局变量的区别:
        全局变量作用域不同,他不像静态局部变量作用域只在函数体内(需要验证)。但是生命周期一样的?
     
     
    2:静态局部变量与普通局部变量的区别:
    区别
    静态局部变量
    普通局部变量
    全局变量
    1
    在全局数据区分配内存
    在栈区分配内存
     
    2
    在程序首次执行到它的时候,进行首次初始化
    每次函数执行到它的时候都会被初始化
     
    3
    静态局部变量,一般在声明处初始化;没有显示的初始化,会被程序自动初始化为0
    局部变量如果不显示的初始化,那么就不会呗初始化。它的值可能是个随意值。
     
    4
    他驻留在全局数据区,生命周期知道整个程序运行结束(而不是函数运行结束);但是作用域只能在函数内,不能在函数外使用。
    局部变量在栈区,函数结束后立即释放
    作用域所有函数可用;
     
    3:静态全局变量
        定义在函数体外,用于修饰全局变量,表示该变量只在本文件可见。
        作用域:该文件内部。
        生存周期:整个程序运行期间。
     
    static int gsi = 1;//note:3
    int gi = 1; //note:4
    int gfoo()
    {
        gsi += 1;
        gi += 1;
        printf("gfoo &gsi= %p	 gsi = %d	 &gi= %p	 gi = %d
    ", &gsi, gsi, &gi, gi);
        return gsi;
    }
    在本文件中,无论调用几次,gi和gsi结果都是一样的。 但是static限定了变量的作用域,只能在本文件内。
        
    4:静态函数
        静态函数跟静态全局变量的作用类似,即静态函数不能被其他文件所用。
        其他文件可以定义相同名字的函数,不会发生冲突
        作用域:该文件内部
        生命周期:整个程序运行期间。
     
    二,C++独有的:
     
    1:静态数据成员
        生存周期:大于class的对象;
        静态数据成员是所有类的对象共有一份;普通数据成员是每一个类的对象有一份 且相互无关联。
     
    2:静态成员函数:
        静态函数属于类,不属于某个具体的对象。 访问方式可以通过类对象调用,也可以用类名::函数名进行访问。
  • 相关阅读:
    TF-IDF与余弦类似性的应用(一):自己主动提取关键词
    三层中的大学问
    浅析JavaBean
    查看和改动MySQL数据库表存储引擎
    菜鸟之路--线性表__链表实现
    STL_算法_元素计数(count、count_if)
    ZOJ 3691 Flower(最大流+二分)
    字符的编码与解码
    主动訪问用户数据的背后是品牌战略
    输入n,求1~n累加
  • 原文地址:https://www.cnblogs.com/Jlord/p/12846608.html
Copyright © 2011-2022 走看看