정적 변수 (static variable)
함수가 종료되어도 프로그램이 종료되지 않는 이상 메모리상에 남아있는 변수
static 자료명 변수명;
보통 일반 지역변수는 스택(Stack) 영역에 저장된다.
이 스택 영역의 변수들은 함수 호출시 메모리에 할당되며 함수 종료시 메모리에서 사라진다.
static 변수는 데이터(Data)영역에 저장되는데, 전역 변수도 이곳에 저장된다.
데이터 영역은 프로그램 시작시 0 또는 NULL이 할당되며, 프로그램 종료시 소멸된다.
이해를 돕기위한 코드
int test()
{
static int cnt = 0;
cnt++;
return (cnt);
}
int main()
{
printf("%d\n", test());
printf("%d\n", test());
return (0);
}
위의 코드 실행시 결과
1
2
특징
- static으로 선언한 변수는 0으로 초기화 된다.
- static 변수는 외부 참조가 되지 않는다.
- 정보 은닉
- static 변수는 매개변수로 사용할 수 없다.
static 포인터 선언시
포인터는 0으로 초기화된다.
따라서 매개변수로 넘겨줄 때 주의해야함
void func1(char *ptr)
{}
void func2(char **ptr)
{}
int main()
{
static char *ptr;
func1(ptr);
func2(&ptr);
}
위와같은 상황에서 func2의 방법을 사용해야 ptr을 의도대로 사용할 수 있다.
fuc1의 상황으로 전달시 매개변수는 NULL 포인터를 가리키게 된다.
따라서 func1에서 ptr의 값을 아무리 변경해도 main의 ptr의 값은 변하지 않는다.
'42SEOUL' 카테고리의 다른 글
[Linux] SIGSEGV (0) | 2022.03.26 |
---|---|
[C / get_next_line] 파일 디스크립터 (File Descriptor) (0) | 2022.03.16 |
[C / Libft] 컴파일 과정 (0) | 2022.03.09 |
[C] File 종류와 함수 (0) | 2022.03.08 |
[C] LIBFT 정리 (0) | 2022.02.13 |