可见范围和变量使用期

有两种基本范围:局部范围和全局范围。

所有函数外部变量声明位于全局范围。 程序的任何地方都可以接入这个变量。这个变量位于内存全局池,所以其使用期同于程序使用期。

内部变量声明属于局部范围。这种变量外部不可见(因此无法得到)。大部分局部变量声明都是一个函数内声明的。局部变量声明位于存储器中,使用期同于函数使用期。

局部变量范围在存储器中声明,也可以在其他存储器以同名声明;也可以高级别声明,乃至全局范围。

示例:

void CalculateLWMA(int rates_total,int prev_calculated,int begin,const double &price[])

  {

   int        i,limit;

   static int weightsum=0;

   double     sum=0;

//---

   if(prev_calculated==0)

     {

      limit=MA_Period+begin;

      //--- 为第一限价柱设置空值

      for(i=0; i<limit; i++) LineBuffer[i]=0.0;

      //--- 首先计算明显值

      double firstValue=0;

      for(int i=begin; i<limit; i++)

        {

         int k=i-begin+1;

         weightsum+=k;

         firstValue+=k*price[i];

        }

      firstValue/=(double)weightsum;

      LineBuffer[limit-1]=firstValue;

     }

   else

     {

      limit=prev_calculated-1;

     }



   for(i=limit;i<rates_total;i++)

     {

      sum=0;

      for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];

      LineBuffer[i]=sum/weightsum;

     }

//---

  }

注意变量i,直线声明

      for(int i=begin; i<limit; i++)

        {

         int k=i-begin+1;

         weightsum+=k;

         firstValue+=k*price[i];

        }

其范围只是一个循环;外圈是同名的函数开始就声明的另一个变量。此外,变量k在内部声明,其范围就是循环内部。

访问静态说明符局部变量声明。这种情况下,编译器在内存全局池有一个变量。因此,静态变量使用期等于程序使用期。这就是变量范围的限制。

另见

数据类型类型密封和扩展变量初始化创建和删除对象