8 - Variable

<학습하기>
변수의 종류.

1. 내부변수(internal variable)
함수 내부 또는 블럭 내부에서 선언된 변수.

범위 : 해당 함수 또는 해당 블럭 안
중복된 블럭 안에 여러개의 같은 이름의 변수가 존재할 경우,
가장 가까운 바깥쪽의 변수가 사용된다.

ex)
main()
{
  int internal = 1;
  {
    int internal = 2;
    {
      int internal = 3;
      printf("%d\n", internal); // 3출력
    }
    printf("%d\n", internal); // 2 출력
  }
  printf("%d\n", internal); // 1 출력
}

단, 이렇게 중복된 블럭 같은 이름은 만드는 것은 프로그램의 가독성을 저하시키므로
사용하지 않는 것이 좋음.

수명: 해당 변수가 선언될 때 만들어짐.
       해당 함수 또는 해당 블럭에서 나갈 때 파괴됨.

2.외부변수(global variable)
함수 밖에서 선언된 변수
범위 : 프로그램 전체
수명 : 프로그램 실행 시 만들어짐.
        프로그램 종료시 파괴됨.

주의점
프로그램 어디서든 접근이 가능하므로,
이 변수에 잘못된 값이 들어갔다면, 오류를 찾기 위해 프로그램 전체를 뒤져야 한다.
그러므로 외부변수는 가능하면 사용하지 않는 것이 좋다.

3.정적변수
함수 안 또는 블럭 안에서 static 키워드와 함께 선언되는 변수.
범위 : 내부변수와 동일.
수명 : 최초로 변수가 만들어질 때 생성
        프로그램이 종료될 때 파괴.

함수의 실행과 관계없이 계속 값이 유지된다.

<실습하기>

  #include <stdio.h>
void FuncA();
void Counter();
int globalVar;   // 전역변수
main()
{
int intVar = 10;
globalVar = 10;
FuncA();
printf("main() intVar : %d\n", intVar);
printf("main() globalVar : %d\n", globalVar);

Counter();
Counter();
Counter();
Counter();
Counter();
}

void FuncA()
{
int intVar = 20;
globalVar = 20;
}

void Counter()
{
int intVar = 0;
static int staticVar = 0;

++intVar;
++staticVar;

printf("intVar:%d  staticVar:%d\n", intVar, staticVar);
}















     

댓글

이 블로그의 인기 게시물

11 - Scanf

JAVA - Day3 - Scanner, if, if else

JAVA - Day5 - Array,Random