2010. 7. 10. 02:02

제 12장 C언어의 핵심, 함수 - 2

 

 


변수의 범위 : 함수와 변수의 관계를 따 져보다.

 

▽  변수의 특성에 따른 분류 


 - 지역변수 : 중괄호{ }  내에 선언된 변수(Local Varial)

 

 - 전역변수 : 함수내에 선언되지 않는 변수(Gloval Varial)

 

 - 정적변수 : 함수 내부, 외부 모두 선언가능(Static Varial)

 

 - 레지스터 변수 : 선언에 제한이 많이 따름(Register Varial)

 

 

 

지역변수 : 선언된 함수내에서만 접근가능
                     - {중괄호} 안에 선언된 변수는 모두 지역변수이다


ex) while(){}, for(;;){}, main(){}등과 같이 {}안에 있는 변수

 

int Fuc()
{
 int k;        // k값이 적용되는 범위는 { } 안에서만 가능
 ...           // 지역변수 k는 이 함수가 끝나면 메모리공간에서 사라진다.
 return 0;  // tip : C메모리구조는 stack 형태로 저장된다.
}

 

int Fuc_1()
{
 int k;  // 이 k값은 위의 Fuc함수의 k값과는 별개다.
 int k1;

 ...
 return 0;
}


예제 =========================================================


#include <stdio.h>

 

int main()
{
 int i;                       // main함수 내에서는 어디에든 접근가능

 for(i=0; i<3; i++)
 {
  int a = 0;               // main함수안의 for문안에 있는 지역변수 a
  a++;
  printf("%d번째 for 루프, 지역변수 a는 %d \n", i, a);
 }                            // 반복을 할때마다 a는 중괄호를 나갔다가 다시 올라간다.
                              // 즉, 지역을 벗어나기 때문에 a는 소멸된다.(생성/소멸반복)
 if(i==3)
 {
  int a = 10;           // main함수안의 if문안에 있는 지역변수 a
  a++;
  printf("if문에 내에 존재하는 지역변수 a는 %d \n", a);
 }
  
 return 0;
}

 

예제 =========================================================

 

#include <stdio.h>

 

int main()
{
 int val = 0;         // main함수를 지역으로 두는 변수

 {                     // main 함수내 줄괄호를 이용해서 또 다른지역을 연다
  int val = 0;        // 만약에 이 수식문이 사라지면
  val = val + 10;   // {} 밖에 있는 val값이 적용된다.
  printf("if의 지역변수 val : %d \n", val);
 }                     // { }의 val 소멸

 printf("main의 지역변수 val : %d \n", val);

 return 0;
}

==============================================================

 

 

지역변수와 매개변수

  - 매개변수도 지역변수의 일종이다.
 
int fuction(int k, int m) // 매개변수(k, m) < 지역변수
{
 k = k+10;
 m = 20;
 
 return k-m;
}

 

 


전역변수

 

 - 프로그램 어디에서도 접근이 가능한 변수

 

 - { } 에 속하지 않는다.

 

 - main함수종료(프로그램 종료)때까지 존재한다.


 - 전역변수는 어디서든 접근가능하다.


 - 그렇지만, 잦은 사용은 좋지 않다.


 - 나중에 프로그램이 커지면, 얽키고 설켜버릴 가능성이 있다.

 

바로 예제 갑니다.

 


예제 =========================================================

 

#include <stdio.h>

int val;  // 전역변수는 자동으로 0으로 초기화 된다.
            //
지역변수는 자동으로 초기화 되지 않음.


void Sum(int k); // 함수선언

 

int main()
{
 printf("val : %d \n", val);

 Sum(4);        
 printf("val : %d \n", val);

 val++;                           // 전역변수


printf("val : %d \n", val); // 전역변수

 return 0;
}

 

void Sum(int n)// 힘수정의
{
 val = val + n; // 프로그램 전체 내에서 val값은 유지된다.
}

 

Posted by 토실토실천재