ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140324 (전역변수, 메모리 구조, 재귀함수)
    부산IT학원/스마트컨트롤러 2014. 3. 24. 17:35

    26일차

     

    --------------------

    전  역  변  수

    --------------------

    - 지역변수와 다르게 어디서든 읽기 쓰기가 가능한 변수.

    - 어떤 함수에서 쓰기 가능하기 위해 컴파일러가 제일 먼저 읽어야 하니

    맨(include 밑에) 위에 선언한다.

    - 기본적으로 0으로 초기화 돼있음.

    - 변수가 만들어 지는 때

        지역변수 : Run Time

        전역변수 : Compile Time

     

    - 지역변수는 Load 하면서 Mem에 할당됨.

    - 전역변수는 컴파일당시에 생성되기 때문에 실행파일에 할당되어 있음.

     

    ex) 예제 소스

    #include <stdio.h>

    void Add(int iVal);
    int iNum;
    int iNum1 = 10;
    int iNum2;
    int iNum3 = 20;
    int iNum4;
    int iNum5 = 30;
    int iNum6;
    int iNum7 = 40;

    int main()
    {
      printf("iNum : 0x%08X \n"&iNum);
      printf("iNum1 : 0x%08X \n"&iNum1);
      printf("iNum2 : 0x%08X \n"&iNum2);
      printf("iNum3 : 0x%08X \n"&iNum3);
      printf("iNum4 : 0x%08X \n"&iNum4);
      printf("iNum5 : 0x%08X \n"&iNum5);
      printf("iNum6 : 0x%08X \n"&iNum6);
      printf("iNum7 : 0x%08X \n"&iNum7);
      printf("Add : 0x%08X \n", Add);
      printf("main : 0x%08X \n", main);
      printf("printf : 0x%08X \n", printf);

      printf("iNum : %d \n", iNum);
      Add(3);
      printf("iNum : %d \n", iNum);
      ++iNum;
      printf("iNum : %d \n", iNum);

      printf("문자열 주소 : 0x%08X \n""Welcome");
      return 0;
    }

    void Add(int iVal)
    {
      if(0 == iNum)
      {
        printf("iVal : 0x%08X \n"&iVal);
      }
      
      iNum = iNum + iVal;
    }

    출력 화면

    위에서 보았듯이 전역변수로 선언되 있는 변수는

    main에서도 Add에서도 접근이 가능하다.

    자세히 볼게 전역변수들을 관찰해 보면

    초기화된 변수와 초기화 안된 변수의 주소값이 몰려 있는게

    다르다.

    초기화된 변수는 함수들의 주소값에 더 가깝다.

    또 상수의 주소도도 초기화된 변수들의 주소와 가깝다.

     

     

     

     

     

    -----------------

    재  귀  함  수

    -----------------

    - 자신을 다시 부르는 함수

    - 사용을 비추천

     

    ex) 예제 소스

    #include <stdio.h>

    void Recursive(int iNum);

    int main()
    {
      Recursive(3);

      return 0;
    }

    void Recursive(int iNum)
    {
      if(0 >= iNum)
      {
        return;
      }
      printf("Recursive call!! %d \n", iNum);

      Recursive(iNum - 1);
    }

     출력 화면

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

Designed by Tistory.