티스토리 뷰

2021.03.01.월

지역 변수

✔  지역 변수는 예약어 auto와 함께 선언하며, 생략 가능하다. 자동 초기화되지 않는다.

✔  지역 변수는 블록 내부로 제한되므로, 다른 함수에서 사용할 수 없다.

✔  블록 범위는 중괄호를 기준으로 결정된다.

✔  각 각 독립된 저장 공간이기 때문다른 함수에 같은 이름의 변수를 선언해도 충돌하지 않는다. 

#include <stdio.h>

void swap(int a, int b);
int main(void){
  int a = 10;
  int b = 20;
  swap(a,b);
  printf("a = %d,  b = %d\n",a,b);
  // a = 10, b = 20 → 값이 그대로인걸 확인할 수 있다.
}

void swap(int a, int b){
  int temp = a;
  a = b;
  b = a;
}

✔  지역변수를 선언한 함수 내부에서만 사용되므로, 함수가 종료되면 저장 공간을 회수하게 된다.

✔  그렇기 때문에 저장 공간을 효율적으로 사용할 수 있다.

✔  지역변수가 사용되는 영역이 정해져 있으므로, 값에 문제가 있을 때 찾아서 수정하기 쉬워서 디버깅에 유리하다.

✔  다른 함수와 변수의 값을 공유하기 어렵지만 장점이 더 많으므로 지역 변수를 더 많이 사용한다.

 

 

 

블록 안에서 사용하는 지역 변수

✔  지역 변수는 일반적으로 함수 내부에서 선언하고, 함수의 종료 시까지 사용한다.

✔  함수 내부에 있는 중괄호 내부에서 변수를 선언하면, 중괄호 내부의 변수는 중괄호가 닫히는 순간까지 사용한다. 

#include <stdio.h>

int main(void){
  int a = 10;
  int b = 20;

  //함수 내부에 새로운 블록을 설정
  {
    int a = 30;
    int b = 40;
    printf("메인 함수 내부에 새로운 블록에서 선언한 a의 값은 %d\n", a);
    printf("메인 함수 내부에 새로운 블록에서 선언한 b의 값은 %d\n", b);
  }

  printf("메인 함수 내부에 선언한 a의 값은 %d\n", a);
  printf("메인 함수 내부에 선언한 b의 값은 %d\n", b);

  return 0;
}

✔  지역 변수는 일반적으로 함수 내부에서 선언하고, 함수의 종료 시까지 사용한다.

✔  함수 내부에 있는 중괄호 내부에서 변수를 선언하면, 중괄호 내부의 변수는 중괄호가 닫히는 순간까지 사용한다. 

✔  만약 범위가 겹치는 같은 이름의 변수가 둘 이상이라면, 가장 가까운 블록에 선언된 변수를 사용한다.

 

 

 

전역 변수

✔  메인 함수의 바깥에 변수를 선언하게 되면, 중괄호로 범위를 지정하지 않았기 때문에 특정 함수에 포함되지 않는다.

✔  메인함수의 바깥에 선언된 변수는 전역 변수라고 하며 사용 범위는 프로그램 전체가 된다..

✔  즉, 프로그램이 실행될 때 메모리에 할당되고 프로그램이 끝날 때까지 존재한다.

✔  전역 변수에 버그가 발생하거나 변수명을 수정한다면 프로그램의 모든 코드를 수정 및 확인해야한다는 단점이 있다.

#include <stdio.h>
//전역 변수
int a;
int b;

void swap();
int main(void){
  a = 10;
  b = 20;
  swap();
  printf("a = %d,  b = %d\n",a,b);
  //a = 20, b = 10
}

void swap(){
  int temp = a;
  a = b;
  b = temp;
}

✔  변수 a와 b는 전역 변수이므로 메인 함수와 swap 함수 모두에서 접근할 수 있다.

✔  즉, 전역 변수 a와 b를 사용하므로 swap함수에는 매개변수가 필요 없다.

✔  그리고 매개 변수의 이름을 a와 b로 설정할 수 없는데, 이미 같은 이름의 전역 변수가 존재하기 때문이다.

✔  만약 블록 내에 같은 이름의 지역 변수를 사용하면, 해당 블록에서는 전역 변수를 사용할 수 없다.

✔  0으로 자동 초기화 된다.

 

 

정적 지역 변수

✔  지역 변수를 선언할 때, static 예약어를 사용하면 정적 지역 변수가 된다.

✔  정적 지역 변수는 일반 지역 변수와 마찬가지로 사용 범위가 블록 내부로 제한된다.

#include <stdio.h>

int sum(int n);
int main(void){
    int n = 2;
    
    for(int i=1; i<4; i++){
        printf("%d번째 getsum 함수 호출 : %d\n",i,sum(n));
    }
	return 0;
}

int sum(int n){
	static int sum;
    sum += n;
	return sum;
}

✔  정적 지역 변수는 프로그램 실행과 동시에 메모리 공간이 할당되며, 종료 시 메모리 공간이 해제된다.

✔  일반 지역 변수와 달리 정적 지역 변수는 함수가 종료되더라도 저장 공간을 그대로 유지한다.

✔  하나의 함수가 여러 번 호출되는 경우 같은 변수를 공유하는 것이 가능하다.

✔  정적 지역 변수는 초기화를 별도로 하지 않는다면 0으로 자동 초기화된다.

 

 

 

 

 

[참고] 한빛미디어-혼자 공부하는 C언어 유튜브 강의 / 엘리스 트랙-혼자 공부하는 C언어 / 길벗-C언어 코딩 도장 / 위키백과

 

댓글
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday