[42서울] 정적 변수(static variable)

tamagoyakii·2022년 4월 25일
1

42seoul

목록 보기
3/19
post-thumbnail

정적 변수(Static Variable)

1. 사용

static 자료형 변수이름;

2. 설명

정젹 변수는 함수를 벗어나더라도 변수가 사라지지 않고 계속 유지된다. 자동 변수와 비교해보자.

  • variable
    #include <stdio.h>
    
    void increaseNumber()
    {
        int num1 = 0;    // 변수 선언 및 값 초기화
    
        printf("%d\n", num1);    // 변수 num1의 값을 출력
    
        num1++;    // 변수의 값을 1씩 증가
    }
    
    int main()
    {
        increaseNumber();    // 0
        increaseNumber();    // 0
        increaseNumber();    // 0
        increaseNumber();    // 0: 변수가 매번 생성되고 사라지므로 0이 출력됨
    
        return 0;
    }
  • static
    #include <stdio.h>
    
    void increaseNumber()
    {
        static int num1 = 0;     // 정적 변수 선언 및 값 초기화
    
        printf("%d\n", num1);    // 정적 변수 num1의 값을 출력
    
        num1++;    // 정적 변수 num1의 값을 1 증가시킴
    }
    
    int main()
    {
        increaseNumber();    // 0
        increaseNumber();    // 1
        increaseNumber();    // 2
        increaseNumber();    // 3: 정적 변수가 사라지지 않고 유지되므로 값이 계속 증가함
    
        return 0;
    }

정적 변수는 프로그램이 끝나기 전까지는 메모리에 계속적으로 존재하며, 함수가 종료되어도 값을 유지하고 있다가 그 다음 함수가 호출되었을 때 직전의 값을 가져온다. 때문에 지역 변수의 값을 유지해야 하거나, 특정 파일에서만 사용할 수 있는 전역 변수를 만들 때 사용된다. 정적 메모리 할당은 컴파일 단계에서 이루어진다는 점에서 자동 메모리 할당이나 동적 메모리 할당과 차이점이 있다.

정적 변수는 선언 위치에 따라 역할이 달라진다. 함수 내부에서 선언되는 경우 해당 스코프 안에서 지역변수의 역할을 하지만, 함수 외부에서 선언되는 경우 전역변수의 역할을 하며, 이 때의 정적 전역 변수는 해당 파일 외부에서 사용할 수 없다는 특징을 가진다. 정적 변수는 매개변수로 사용할 수 없다. 매개변수 앞에 static을 붙이는 경우 매개변수는 정적 변수가 되지 않으며 값이 유지되지 않는다.

메모리 할당 공간에 대해서는 다음 TIL에서 다루도록 하겠다. 나는 메모리 영역이 네개나 있는지 몰랐다고~~!!!!

참고자료

https://dojang.io/mod/page/view.php?id=690
https://code4human.tistory.com/128

0개의 댓글