static 변수

haeseong·2023년 5월 3일
0

42서울

목록 보기
2/3

static 변수란 ?

static 변수는 해당 변수가 선언된 함수 또는 블록 내에서만 유효하다는 특징을 가진다. 다시 말해서 static 변수는 함수 또는 블록이 실행 될 때마다 새로운 메모리 공간을 할당 받지 않고, 해당 함수나 블록이 종료 되어도 여전히 그 값을 유지하는 변수이다.

static 변수는 일반 변수들과 마찬가지고 지역 변수와 전역 변수 어느 것으로도 이용이 가능하다 static 변수는 전역이든 지역이든 메모리의 data section에 위치하게 된다.

외부 정적 변수

외부 정적 변수 (external static variable)는 전역 변수의 일종으로, 전역 변수는 다른 소스 파일에서도 접근이 가능한 반면 외부 정적 변수는 해당 소스 파일 내에서만 접근 가능하도록 변수의 범위를 제한한 전역 변수이다. 외부 정적 변수 또한 전역 변수와 마찬가지로 별도의 초기화 없이도 0으로 초기화 된다.

내부 정적 변수

특정 함수 내부에 선언된 static 변수를 내부 정적 변수라고 부른다. 내부 정적 변수는 해당 함수가 종료되더라도 메모리에서 해제되지 않고 유지된다.

내부 정적 변수는 별도의 초기화를 하지 않으면 0으로 초기화 되며, 또한 프로세스의 메모리가 할당되는 프로그램의 시작 시점에 초기화가 이뤄지기 때문에(전역 변수와 같이 초기화가 이루어짐) 함수 실행 등으로 인한 선언문에서의 실행으로는 또 다시 초기화가 이뤄지지 않고 무시된다.

내부 정적 변수는 함수의 실행 결과를 계속해서 유지하기 위해 사용될 수 있다.

#include <stdio.h>

void myFunction() {
    static int count;
    count++;
    printf("%d\n", count);
}

int main() {
    myFunction(); // 출력: 1
    myFunction(); // 출력: 2
    myFunction(); // 출력: 3
    return 0;
}

myFunction() 함수에서의 count는 내부 정적 변수로 선언이 되어 있고, 별도의 초기화 과정이 없었기 때문에 0으로 초기화가 이뤄진다. 함수를 호출 할 때마다 count는 1씩 값이 증가하게 되고 count는 함수가 종료되어도 파괴되지 않고 프로그램이 종료 될 때 파괴된다.

그러므로 위의 코드는 1, 2, 3이 출력된다.

0개의 댓글