제 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값은 유지된다.
}
'프로그래밍 > C' 카테고리의 다른 글
제 14장 1차원 배열 - 1 (0) | 2010.07.10 |
---|---|
제 13장 C언어의 핵심 함수 - 3 (0) | 2010.07.10 |
제 11장 C언어의 핵심 함수 - 1 (0) | 2010.07.10 |
제 10장 조건에 따른 흐름의 분기 - 2 (0) | 2010.07.08 |
제 9장 조건에 따른 흐름의 분기 - 1 (0) | 2010.07.08 |