C - 자동변수와 정적변수

2022. 3. 8. 16:59C

자동변수란 ?

함수나 블록의 내부에서만 선언되는 변수로서 변수의 유효범위가 함수나 블록의 내부에서만 한정되는 지역 변수이다.

함수의 실행이 끝나면 소멸되는 동적변수이다.

함수나 블록의 내부에서 기억 클래스가 명시되지 않은 모든 변수는 자동변수라고 볼 수 있다.

int a = 10;
    {
        int a = 20;
        printf("a --- %d\n", a);
    }
    printf("a --- %d\n", a);
}


출력 결과

a --- 20
a --- 10

 

정적변수란?

static이라는 지시어를 사용하여 프로그램이 시작할 때 기억장소를 할당받고 프로그램이 끝날 때까지 기억장소에 계속 존재하는 변수이다.

정적 변수가 함수나 블록 내부에서 선언되면 함수나 블록 내부에서만 유효한 지역변수가 되고, 정적변수가 함수의 외부에 선언되면 변수가 선언된 이후부터 프로그램 끝까지 유효한 전역변수가 된다.

 

두 변수의 차이점으로 자동변수는 함수나 블록이 실행될때마다 초기값이 부여되지만 정적변수는 프로그램 수행되는 동안 단 한번만 초기화가 된다.

 

둘의 차이점을 알아보는 예시를 보면

void sample();

int main() {
    sample();
    sample();
    sample();
}
void sample() {
    static int a = 10;
    int b = 10;
    a = a + 10;
    b = b + 10;
    printf("a = %d --- b = %d\n",a ,b);
}

출력 결과

a = 20 --- b = 20
a = 30 --- b = 20
a = 40 --- b = 20

결과를 보면 a의 값은 static을 이용함으로써 메인함수에서 호출할때마다 10이 추가된 결과 값을 보여준다.

 

'C' 카테고리의 다른 글

C - 구조체  (0) 2022.03.09
C - 이중 포인터  (0) 2022.03.09
C - 재귀함수  (0) 2022.03.07
C - 함수  (0) 2022.03.07
C - 포인터와 배열  (0) 2022.03.07