제 13장 C언어의 핵심, 함수 - 3
● 변수의 범위 : 함수와 변수의 관계를 따 져보다.
▽ 변수의 특성에 따른 분류
- 지역변수 : 중괄호{ } 내에 선언된 변수(Local Varial)
- 전역변수 : 함수내에 선언되지 않는 변수(Gloval Varial)
- 정적변수 : 함수 내부, 외부 모두 선언가능(Static Varial)
- 레지스터 변수 : 선언에 제한이 많이 따름(Register Varial)
● static변수
- 함수내부 및 외부에 선언가능
- 한번만 초기화 된다 : 전역변수의 특징을 가진다
- 함수내부에서 선언될 경우 함수내에서만 접근 가능
> 지역변수의 특징 static int a;
예제) ========================================================
#include <stdio.h>
void Fuc(void)
{ // 한번만 초기화 되기때문에
static int num = 0; // 2번째 호출부터 실행되지 않는다.
// num값은 0으로 한번만 초기화가 이루어진다.
num++;
printf("%d \n", num);
} // 함수를 빠져나와도, num은
// 값을 유지하면서 소멸되지 않는다!
int main()
{
int i;
for(i=0; i<5; i++)
Fuc();
return 0;
}
=============================================================
● register : cpu내의 가장가까운 기억장치(상당히 빠른 메모리)
- 여유가 있는 메모리 공간은 아니다.(잘 사용하지 않는다)
- regiter int b; // regiter 메모리공간에 변수를 선언한다.
- 사용시, 많은 제약이 따른다
● 재귀 함수
- 자기자신을 다시 호출하는 형태의 함수
- 프로그램을 이용하기위해선 프로세서를 이해해야 한다.
-> 컴퓨터 구조(H/W -> 운영체제)
-> 운영체제
- 자기자신을 계속 호출하기때문에, 이해하기보다는
- 코딩시 조금만 신경써서, 분석하며 작성하는게 좋다!
- 하지만 스택오버플로우(메모리과다사용으로 인한 경고)를 조심한다.
예제 ) ==========================================================
#include <stdio.h>
void Print()
{
printf("재귀함수 호출 \n");
Print(); // 자기자신을 다시 호출한다.
} // 무한루프에 빠지게 된다.
int main()
{
Print();
return 0;
}
예제 )==========================================================
#include <stdio.h>
void Repeat(int n) // 함수선언 및 정의
{
printf("재귀함수 호출\n");
if(n==1) // if문은 재귀함수를 빠져나가기 위한 조건
return ; // return문 용도 : 함수 빠져나오거나, 값을 반환할때 쓰임
Repeat(n-1); // n값은 1씩 감소하면서 호출해 나간다.
} // 결국 n값이 1이 되면 빠져나가게 되는 함수
int main()
{
int a = 4;
Repeat(a); // 함수호출
return 0;
}
// -> 핵심 : 무한 재귀호출을 위해서 탈출조건을 잘 구현해야함
※ 재귀함수의 대표적인 사례는 팩토리알 (factoral)계산
n! = (n-1) * (n-2)......* 2 * 1
5! = 5 * 4 * 3 * 2 * 1
예제 )==========================================================
#include <stdio.h>
int Fat(int n);
int main()
{
int input;
printf("정수 하나 입력 : ");
scanf("%d", &input);
printf("%d! = %d \n", input, Fat(input));
return 0;
}
int Fat(int n)
{
if(n==0) // n값이 1이면 빠져나가게 한다.
return 1;
else
return n*Fat(n-1); // Fat함수를 호출시 매개변수 값이
// 1씩 감소하면서 호출한다
}
'프로그래밍 > C' 카테고리의 다른 글
제 15장 1차원 배열 - 2 (0) | 2010.07.10 |
---|---|
제 14장 1차원 배열 - 1 (0) | 2010.07.10 |
제 12장 C언어의 핵심 함수 - 2 (0) | 2010.07.10 |
제 11장 C언어의 핵심 함수 - 1 (0) | 2010.07.10 |
제 10장 조건에 따른 흐름의 분기 - 2 (0) | 2010.07.08 |