프로그래밍 언어/C
[C/C++ 1.4] static 변수
물꼮이
2022. 3. 10. 09:52
*지역변수(local)
- 선언된 함수 내에서만 접근 가능
- 해당 함수 return 하면 소멸
* 전역변수(global)
- 후략???????
지역변수의 static 선언)
- 선언된 함수 내에서만 접근 가능 (local)
- 항상 메모리공간에 존재 - 해당 함수 return 되도 소멸하지 않음 (global)
- 초기화하지 않으면 0으로 초기화됨 (global)
- 프로그램 시작과 동시에 할당&초기화_초기화는 오직 1회만됨 (global)
[함수 호출 시 선언되는 것이 아님!!** 특정 함수 안에 쓰여있더라도(밑의예시처럼)
이는 그저 접근범위를 제한하기 위함]
- 프로그램 종료될 때까지 메모리 공간에 고정 (global)
ex)
#include <stdio.h>
void func(void){
static int num1 = 0; //if 초기화하지 않으면 값 0 (전역변수 특징) ***
int num2 = 0; //if 초기화하지 않으면 쓰레기값 (지역변수 특징)
num1++, num2++;
printf("static: %d, local: %d\n", num1, num2);
}
/*for test*/
int main(void) {
int i;
for (i = 0; i < 5; i++)
func();
return 0;
}
결과화면)

같은 function이 반복되어도,
local변수는 매 회 함수가 반환하며 초기화되어 매번 1을 출력하지만,
static은 값이 메모리공간에 고정 되어 매 회 1이 더해진다.
즉, 위 func함수에서
static int num1=0;
부분은 존재하지 않는 것 처럼 간주하면 된다.
* 전역변수 대신 사용하면 안정성↑
* 단, 변수에 접근하는 영역이 단 하나의 함수 일 때만 가능