Sichtbereich und Lebensdauer der Variablen

Es gibt zwei Typen von Sichtbereich: lokaler Sichtbereich und globaler Sichtbereich.

Variable, die ausser aller Funktionen erklärt wurde, wird in globalen Sichtbereich eingestellt.Zugang zu diesen Variablen kann aus jedem Programmplatz erfolgen. Solche Variablen befinden sich im globalen Pool des Speichers, darum faellt ihre Lebensdauer mit der Programmlebensdauer.

Variable, erklärt innerhalb des Blocks (Codeteil in geschweiften Klammern) gehört dem lokalen Sichtbereich. Solche Variable ist unsichtbar (darum unzugaenglich) ausser Block, in dem sie erklärt wird. Die verbreiteste lokale Erklaerung - Variable, erklärt innerhalb der Funktion. Variable, die lokal erklärt wid befindet sich im Stoss und ihre Lebensdauer faellt mit der Lebensdauer der Funktion zusammen.  

Da Sichtbereich der lokalen Variable Block, in dem sie erklärt wurde, ist, gibt es die Moeglichkeit, Variablen mit Namen zu erklären, der mit den Variablennamen, erklärt in anderen Blocks, und auch erklärt auf den hoeheren Niveaus bis zum globalen, zusammenfaellt.

Beispiel:

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;
      //--- set empty value for first limit bars
      for(i=0; i<limit; i++) LineBuffer[i]=0.0;
      //--- calculate first visible value
      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;
     }
//---
  }

Legen Sie Wert auf Variable i, erklärt in der Zeile:

      for(int i=begin; i<limit; i++)
        {
         int k=i-begin+1;
         weightsum+=k;
         firstValue+=k*price[i];
        }

Ihr Sichtbereich ist ausschliesslich der Zyklus for, ausser dieses Zyklus fungiert eine andere Variable mit demselben Namen, erklärt am Anfang der Funktion. Außerdem wird im Zykluskoerper die Variable k erklärt, deren Sichtbereich Zykluskoerper ist.

Lokale Variablen können mit dem Zugangsspezifikator static erklärt werden. In diesem Fall stellt der Compilierer diese Variable in globalenSpeicherpool. Darum faellt Lebensdauer statischer Variabler mit der Lebensdauer der Programmlebensdauer zusammen. Dabei wird Sichtbereich dieser Variable vom Block, in dem sie erklärt wurde, begrenzt.

Sehen Sie auch

Datentypen, Inkapsulation und Erweiterungsfaehigkeit der Typen, Initialisierung der Variablen, Erzeugung und Entfernung der Objekte