static 변수
- static 변수를 정적 변수라고 부릅니다.
- 전역변수와 지역변수 모두에 static 선언을 추가할 수 있다.
하지만 static 변수는 『접근이 제한된 전역변수』를 만드는 것이기에 지역변수에 이용되는게 일반적.
지역변수에 static을 붙인 경우
- 선언된 함수 내에서만 접근이 가능한 것은 계속해서 유효하다.
- But, 해당 함수가 반환되면 소멸되지 않고, 처음 한번 초기화되고
프로그램 종료 시까지 메모리 공간에 존재한다.
즉, 한번만 초기화 되는 것입니다. (전역변순의 성격을 조금 띄게 됨)
#include <stdio.h>
int simpleFunc() {
static int x = 0; // 초기화하지 않으면 0으로 초기화
int y = 0; // 초기화하지 않으면 쓰레기 값 초기화
x++; y++;
printf("static: %d, local: %d \n", x, y);
}
void main() {
int i;
for (i = 0; i < 3; i++)
simpleFunc();
return;
}
Q. static으로 선언된 지역변수 x는 simpleFunc 함수가 호출되어야 선언될까?
A. 아니다!
static 사용의 목적은 전역변수의 선언시 초기화하지 않아도 기본값으로 초기화
프로그램 시작하면 메모리에 할당 및 초기화하는 성질을 띄기에 함수가 호출되기전에 선언됩니다.
함수 내에서만 접근이 가능도록 제한하는 용도로 사용됩니다.
다음과 같이 유효하지 않은 범위에서 접근하면 Error 발생
[해석] static 변수는 전역변수의 단점 중 하나인 누구나 함부로 접근할 수 있는 단점 해결
기존의 전역변수를 static 지역변수로 대체한다면 프로그램의 안전성을 높일 수 있다.
"난 사실 전역변수랑 성격이 같아. 초기화하지 않으면 전역변수처럼 0(기본값)으로 초기화되고,
프로그램 시작과 동시에 할당 및 초기화되어서 프로그램이 종료될 때까지 메모리 공간에 남아있지!
그럼 왜 이 위치에 선언되었냐고? 그건 접근의 범위를 simpleFunc로 제한하기 위해서야"
→ Code 상에서는 SimpleFunc 내부에서 선언되었지만
메모리상으로는 전역변수와 같이 Data영역에 저장된다.
※ C 언어 메모리 구조 [Code] | [Data] | [Heap] | [Stack]
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] 문자열 관련 함수 (0) | 2021.03.19 |
---|---|
[C] 지역변수와 전역변수 (0) | 2021.03.19 |
[C] 구조체 (structure) (0) | 2021.03.19 |
[C] 조건문 (Switch문 예제) (0) | 2021.03.19 |
[C/C++] time(), clock()으로 실행시간 측정 (0) | 2021.03.19 |
댓글