관리 메뉴

사적공간

정적 변수, static 본문

KNOU_CS/C

정적 변수, static

2sac 2024. 3. 12. 18:56
#include <stdio.h>
void static_test();
void main() {
int i = 0;
while(i < 5) {
    static_test();
    i++;
}
}

void static_test() { 
    static int s; // 정적 변수 s 가 0 으로 자동 초기화 후 이후 호출되면 초기화 안됨. 
    auto int a = 0; // 자동변수 a 선언, 스택공간에 저장되고 함수 실행이 끝나면 기억공간에서 사라짐. 
    ++s;
    ++a;
    printf("static s = %d, auto a = %d \n", s, a); 
}

static s = 1, auto a = 1 
static s = 2, auto a = 1 
static s = 3, auto a = 1 
static s = 4, auto a = 1 
static s = 5, auto a = 1 

 

 

static은 임시기억 영역이 아닌 일반 기억 영역에 저장됨. 컴파일 때 확보되어 변수에 할당됨. 

 

모든 전역변수는 정적변수에 해당됨. 

 

정적변수의 기억공간 할당과 초깃값 부여는 자동변수와 달리 컴파일 할 때 한번 이루어지며, 특별한 지정이 없으면 예시와 같이 0으로 초기화 됨. 

 

전역변수와의 차이는 어디서나 접근 가능하며 전체 프로그램에서 변경 가능하지만 정적변수는 전역변수의 특징을 가지면서 선언된 지역 내에서만 접근이 가능함. 변수의 값은 프로그램 실행 중 유지됨. 

 

extern 선언으로 다른 파일에서 참조 불가함. 

'KNOU_CS > C' 카테고리의 다른 글

break문 탈출범위  (0) 2024.04.03
반복문  (1) 2024.03.14
연산자 우선순위  (0) 2024.03.13
표준 입력 함수(scanf)  (1) 2024.03.12
표준 입출력 함수 포맷스트링 -, 0, 전체자리수, 소수점 자리수  (0) 2024.03.12