zoukankan      html  css  js  c++  java
  • static变量

    首先看下面代码:

    #include<stdio.h>
    int x=4;
    void incre() 
    {    static int x=1;   
     x*=x+1;  
       printf("%d",x);
    }
    int main()
     {    int i;   
      for(i=1;i<x;i++)
      {       
       incre(); 
          }  
          return 0;
    }

    结果为:2642
    这里涉及到对static变量和全局变量的理解:

    C:static
    函数外部定义,是文件静态变量,作用域为文件,生命周期是程序生命期。
    函数内定义,是函数内部的静态变量,作用域为函数,生命周期是该程序生命期。
    其中,函数中,语句组的内部静态变量,作用域为该语句组,生命周期是该程序生命期。上面代码中static变量只在ince()函数内有效。并且static变量在初始化的时候只会初始化一次,即第一次初始化,后面再调用ince()函数的时候不会再初始化。
    C++:
        文件内的,匿名命名空间内,定义的变量,相当于文件静态变量。
        作用域为文件,生命周期是程序生命期。
    类内部定义的静态变量,作用域为类,生命周期是程序生命期。
    可以使用的区域是类,
        友元类或友元函数,以及定义类的区域,这些和友元,访问权等有关。
       类的作用域对友元是开放的。子类也有可能可以使用。
       对定义类的区域是否开放和访问权限等有关。
       其中 public 定义的静态变量, 在定义类的区域,可以通过类名访问。
       
    和函数不同,函数内部定义的静态变量;
    不可用在其他地方,只能通过函数调用访问。
    类内部定义的静态变量,可以直接在类外部,通过类名引用。

    在多个文件中调用全局变量正确的做法是在.c中定义全局变量,而在.h中用extern引出全局变量,当然static变量是无法extern的。

  • 相关阅读:
    向Sql Server数据库插入中文时显示乱码的解决办法 (转)
    自定义控件开发知识点
    Win7旗舰版中的IIS配置asp.net的运行环境
    windows使用
    Visual Studio 2012自动添加注释(如版权信息等)
    3个线程彼此通知
    多线程12_张孝祥 java5读写锁技术的妙用
    多线程11_张孝祥 java5的线程锁技术
    Spring整合hibernate4:事务管理[转]
    HTML界面JQuery ajax 返回200,但走Error方法
  • 原文地址:https://www.cnblogs.com/xiaodingmu/p/7451096.html
Copyright © 2011-2022 走看看