static 변수의 특성
선언된 함수내에서만 접근이 가능하다.(지역변수 특성)
딱 1회 초기화되고 프로그램 종료시까지 메모리 공간에 존재한다.(전역변수 특성)
void ForStaticFunc(void)
{
static int num=0;
num++;
printf("%d \n",num);
}
int main(void)
{
int i;
for(i=0;,i<3,i++)
ForStaticFunc();
return 0;
}
위와 같은 예제를 실행할 경우
1
2
3
과 같이 출력된다.
함수 안에 있는 static 변수라 해도 프로그램이 실행되자마자 메모리에 올라간다.
그리고 메모리에 올라가면서 최초의 초기화는 한번만, 단 한번만 초기화가 이뤄지고 다시는 초기화되지 않는다.
따라서 ForStaticFunc 함수를 아무리 불러도 num이라는 static 변수는 0으로 초기화되지 않는 것이다.
함수를 불렀을 때 해당함수의 몸체에 있는 static 변수를 초기화 하는 문장은 없는거나 마찬가지다.