조금씩 꾸준히 완성을 향해

[C 언어] 정적(STATIC) 변수 본문

기타 언어/C 언어

[C 언어] 정적(STATIC) 변수

all_sound 2023. 3. 29. 13:46

정적(static) 변수

- 단 한번만 초기화하고, 그 이후에는 전역변수처럼 프로그램이 종료될 때까지 메모리 공간에 존재하는 변수

- 초기값이 지정지 안되면, 자동으로 0이 대입

 

지역(local) 변수 vs 정적(static) 변수 사용

▶ local 변수

#include <stdio.h>

void test(){
  int a=10;
  a++;
  printf("%d", a);
}

int main() {
  test();
  test();
}

// 1111

 

 static 변수

#include <stdio.h>

void test(){
  static int a=10;
  a++;
  printf("%d", a);
}

int main() {
  test();
  test();
}

// 1112

<예제 1>

#include <stdio.h>

void funCount();

int main() {
  int num;
  for(num=0; num<2; num++)
    funCount();
  return 0;
}

void funCount(){
  int num=0;
  static int count;
  printf("num=%d, count=%d\n", ++num, count++);
}

// num=1, count=0
// num=1, count=1

 

<예제 2>

#include <stdio.h>

int fo(void);

int main() {
  int i=0, sum=0;
  while(i < 3){
    sum = sum + fo();
    i++;
  }
  printf("sum=%d\n", sum);
}

int fo(void){
  int var1 = 1;
  static int var2 = 1;
  return (var1++) + (var2++);
}
// sum=9

 

<예제 3>

#include <stdio.h>

int funcA(int n);
int funcB(int n);

int main() {
  int s1, s2;
  s1 = funcA(2);
  printf("F1 = %d, ", s1);
  s1 = funcA(3);
  printf("F2 = %d, ", s1);
  s2 = funcB(2);
  printf("F3 = %d, ", s2);
  s2 = funcB(3);
  printf("F4 = %d ", s2);
}

int funcA(int n){
  static int s = 1;
  s *= n;
  return s;
}

int funcB(int n){
  int s = 1;
  s *= n;
  return s;
}
// F1 = 2, F2 = 6, F3 = 2, F4 = 3

 

<예제 4>

#include <stdio.h>

int a = 10;
int b = 20;
int c = 30;
void func(void);

int main() {
  func();
  func();
  printf("a=%d, b=%d, c=%d\n", a, b, c);
}

void func(void){
  static int a = 100;
  int b = 200;
  a++;
  b++;
  c = a;
}

// a=10, b=20, c=102

 

 

 

 

 

※ 유튜브 흥달쌤 깨알 C언어 특강을 직접 정리한 내용입니다

'기타 언어 > C 언어' 카테고리의 다른 글

[ C 언어] 중복 재귀함수  (0) 2023.03.29
[C 언어] 재귀 함수  (0) 2023.03.29
[C 언어] 함수 주소 전달 & 주소 리턴  (0) 2023.03.26
[C 언어] 함수  (0) 2023.03.22
[C 언어] 배열 포인터  (0) 2023.03.22