可见范围和变量使用期

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

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

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

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

示例:

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在内部声明,其范围就是循环内部。

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

另见

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