정적(static) 변수는 전역 변수와 지역 변수의 중간쯤 되는 특성을 가진다. 정적변수도 전역정적 변수와 지역 정적 변수로 나뉘지만 여기에서는 지역 정적 변수에 대해서만 설명하도록 하겠다.


 지역 정적 변수는 함수의 수행이 끝나더라도 그 값을 유지시켜야만 할 때 사용되는 것이다. 즉, 이 변수는 함수의 수행이 끝나더라도 소멸되지 않으며 그 값을 유지하고 있으며 프로그램의 수행이 끝날 때까지 그 값을 유지하는 변수이다.


 정적 변수는 static이라는 키워드를 데이터형 앞에 붙여주면 되는데 다음과 같이 정의한다.


함수() {
   static 데이터형 변수명1, 변수명2, ...;
}


이렇게 정의된 변수들은 프로그램의 수행이 시작될 때 생성되며 함수의 수행이 끝나더라도 그 값이 유지되며 다음에 호출되었을 때 그 유지된 값을 이용할 수 있다. 프로그램이 실행될 때 생성되고 끝날 때 까지 보존이 된다는 점에서 전역 변수와 라이프 싸이클이 같지만 선언된 함수 내부에서만 사용할 수 있다는 점이 다르다.


다음의 예에서 간단한 사용법을 보였다.


#include <stdio.h>
void countUp(int);

int main(void) {
   int iIn;
   do {
       printf("Input an interger number : ");
       scanf("%d", &iIn);
       countUp(iIn);
   }
   while (0<=iIn && iIn<=10);
}

void countUp(int iR) {
   static int iCount = 0; //❶
   printf("%d번째 수는 %d.\n", ++iCount, iR);
}

실행결과:

Input an interger number : 8
1번째 수는 8.
Input an interger number : 4
2번째 수는 4.
Input an interger number : 10
3번째 수는 10.
Input an interger number : 0
4번째 수는 0.
Input an interger number : -1
5번째 수는 -1.


 이 예제는 사용자가 입력한 숫자가 0이상 10이하라면 다시 입력받고 현재까지 몇 개가 입력되었는가를 세는 간단한 프로그램이다. 이 예제의 countUp()함수 안의 ❶번 줄에서 iCount 변수가 정적 변수로 선언되었다. 따라서 이 함수가 종료되더라도 그 값은 계속 유지하며 이 사실은 실행 결과에서 확인할 수 있다.


 내부 정적 변수도 내부 변수이므로 그것이 위치한 함수 내부에서만 접근할 수 있다는 사실은 유의하자.


C++ 강좌 전체 목록 >>>


c{c++},n{c0028}


Posted by 살레시오
,