static 변수는 지역변수와 전역변수 둘의 성질을 같이 가지고 있다고 보면 된다.
static 변수는 지역변수처럼 선언된 함수내에서만 사용이 가능하며,
단 한번만 초기화를 할뿐 전역 변수처럼 프로그램이 종료될때까지 메모리공간에 존재하게된다.
다른점은 지역변수와는 달리 해당 함수가 반환을 하더라도 소멸되지 않는다.
이처럼 다른 함수에서는 쓸수없지만 해당함수 내에서는 static 변수는 프로그램이 종료를 하기전까진 소멸되지 않는다.
아래와 같은 예제를 살펴보자
결과를 보면알겠지만 num1은 static이라 한번 초기화될 뿐 값이 사라지지 않고 계속 유지 되지만.
num2는 simpleFunc 함수를 실행 할때마다 초기화되어 값이 그대로이다.
#include<stdio.h>
void simpleFunc(void);
int main(void)
{
int i;
for (i = 0; i < 3; i++){
simpleFunc();
}
return 0;
}
void simpleFunc(void)
{
static int num1 = 0;
int num2 = 0;
num1++, num2++;
printf("stastic: %d, local:%d \n", num1, num2);
}
static은
선언된 함수 내에서만 접근이 가능하고
1회 초기화된후 프로그램 종료시까지 메모리공간에 존재한다.
결과
static : 1, local : 1
static : 2, local : 1
static : 3, local : 1
'C' 카테고리의 다른 글
c언어 10진수 정수 입력 받아 16진수와 8진수로 출력하기 (0) | 2014.04.28 |
---|---|
c언어 재귀함수(순환함수) 이용하여 입력받은 숫자 차례로 출력하기 (2) | 2014.04.28 |
c언어 함수와 전역변수를 사용하여 저축, 인출 하기 (0) | 2014.04.27 |
c언어 사용자가 원하는 만큼의 정수를 입력한후 합계 출력하기 (0) | 2014.04.27 |
c언어 라이브러리 함수 sin()함수를 이용하여 사인값(sin) 출력과 그래프 출력 (0) | 2014.04.27 |