Notice
Recent Posts
Recent Comments
Link
Love Every Moment
〔C언어〕정적 변수(Static Variable)란? 본문
반응형
1. 변수의 종류
(1) 지역 변수(Local Variable)
- 프로그램 내의 변수가 선언된 함수에서만 사용 가능한 변수
- 함수가 시작할 때에 메모리가 할당되고 함수가 끝날 때에 메모리가 해제됨
- 스택 영역에 저장되며 함수가 끝나면 자동 삭제됨
- 따라서 함수 실행이 끝나면 변수에 저장된 값은 사라짐
(2) 전역 변수(Global Variable)
- 함수 밖에서 선언되어 주어진 프로그램 내의 어느 함수에서나 사용 가능한 변수
- 프로그램이 시작할 때에 메모리가 할당되고 프로그램이 끝날 때에 메모리가 해제됨
- 컴파일 시간에 데이터 영역에 메모리를 할당하여 저장되며 프로그램이 끝나면 자동 삭제됨
- 따라서 프로그램이 끝날 때까지 변수 안의 값이 유지됨
(3) 정적 변수(Static Variable)
- 지역 변수의 특성과 전역 변수의 특성을 합친 변수
- 특정 함수에만 사용 가능하면서도 함수가 끝나더라도 값이 그대로 유지됨
- 따라서 프로그램이 끝날 때까지 변수 안의 값이 유지됨
- 모든 전역 변수들은 정적 변수라고 할 수 있다
- 컴파일 시간에 데이터 영역에 메모리를 할당하여 저장되며 프로그램이 끝나면 자동 삭제됨
2. 정적 변수의 사용 예시
#include <stdio.h>
void ring();
int main(void)
{
ring();
ring();
ring();
return (0);
}
void ring()
{
static int man = 0;
++man;
printf("현재 대기 인원은 %d 명 입니다.\n", man);
}
만약 man 의 자료형을 static int 이 아니라 int 로 지정했다면,
ring() 이 실행될 때마다 man 의 값이 자동 삭제되어 1 만 출력되게 된다.
하지만 정적 변수를 이용하면 프로그램이 끝날 때까지 값이 남아있으므로 1, 2, 3 이 출력된다.
만약에 static int man; 처럼 초기값을 지정하지 않는다면 0 으로 자동으로 초기화된다.
참고하면 좋은 글:
컴퓨터 코딩 프로그래밍 교육
반응형
'PROGRAMMING::LANGUAGE > C' 카테고리의 다른 글
〔C언어〕메모리 누수 검사하기 (0) | 2021.06.04 |
---|---|
〔C언어〕댕글링 포인터(Dangling Pointer)란? (0) | 2021.05.27 |
〔C언어〕size_t 와 unsigned int 의 차이? (0) | 2021.05.07 |
〔CS50 / C언어〕자료구조: 메모리 할당, 연결 리스트, 해시 테이블, 트라이, 스택, 큐, 딕셔너리 (0) | 2021.02.26 |
〔CS50 / C언어〕메모리: 포인터, 문자열, 메모리 할당과 해제, 파일 쓰고 읽기 (0) | 2021.02.16 |
Comments