可见范围和变量使用期
有两种基本范围:局部范围和全局范围。
所有函数外部变量声明位于全局范围。 程序的任何地方都可以接入这个变量。这个变量位于内存全局池,所以其使用期同于程序使用期。
内部变量声明属于局部范围。这种变量外部不可见(因此无法得到)。大部分局部变量声明都是一个函数内声明的。局部变量声明位于存储器中,使用期同于函数使用期。
局部变量范围在存储器中声明,也可以在其他存储器以同名声明;也可以高级别声明,乃至全局范围。
示例:
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在内部声明,其范围就是循环内部。
访问静态说明符局部变量声明。这种情况下,编译器在内存全局池有一个变量。因此,静态变量使用期等于程序使用期。这就是变量范围的限制。
另见
数据类型, 类型密封和扩展,变量初始化, 创建和删除对象