가시성 범위 및 변수 수명

범위에는 두 가지 기본 유형이 있습니다: 로컬 범위 및 글로벌 범위.

모든 함수 외부에 선언된 변수는 글로벌 범위에 있습니다. 이러한 변수에 대한 액세스는 프로그램의 어디에서나 수행할 수 있습니다.이러한 변수는 글로벌 메모리 풀에 있으므로 프로그램 수명과 일치합니다.

블록 내부에 선언된 변수(대괄호로 묶인 코드의 일부)는 로컬 범위에 속합니다. 이러한 변수는 선언된 블록 외부에 표시되지 않으므로 사용할 수 없습니다. 로컬 선언의 가장 일반적인 경우는 함수 내에서 선언된 변수입니다. 로컬로 선언된 변수는 스택에 있으며 이러한 변수의 수명은 함수의 수명과 같습니다.

로컬 변수의 범위는 선언된 블록이기 때문에 다른 블록에서 선언된 변수뿐만 아니라 상위 수준에서 선언된 변수와 이름이 같은 변수를 글로벌 수준까지 선언할 수 있습니다.

예제:

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];
        }

해당 범위는 for 루프입니다. 이 루프 밖에는 함수의 시작 부분에 선언된 동일한 이름의 다른 변수가 있습니다. 또한 k 변수는 루프 본문에 선언되며, 그 범위는 루프 본문입니다.

로컬 변수는 액세스 지정자 static을 사용하여 선언할 수 있습니다. 이 경우 컴파일러는 글로벌 메모리 풀에 변수를 가집니다. 따라서 정적 변수의 수명은 프로그램의 수명과 같습니다. 여기서 이러한 변수의 범위는 선언된 블록으로 제한됩니다.

더 보기

데이터 유형, 유형의 캡슐화 및 확장성,변수 초기화, 객체 생성 및 삭제