윤성우의 열혈 c 프로그래밍 Chapter 9 C언어의 핵심! 함수!
09-1 함수의 정의와 선언
1. 다양한 형태의 함수 정의
-
전달인자 O 반환값 O
int Add(int num1, int num2)
{
int result = num1+num2;
return result; / result 값을 Add 함수를 호출한 영역으로 전달 /
}→ 전달인자: int형 변수 num1, num2 / 반환값: result
-
전달인자 O 반환값 X
void ShowAddResult(int num)
{
printf("덧셈 결과 출력: %d \n", num);
}void: 무효임을 선언하다. 비우다.
-
전달인자 X 반환값 O
int ReadNum(void)
{
int num;
scanf("%d", &num);
return num;
} -
전달인자 X 반환값 X
void HowToUseThisProg(void)
{
printf("두 개의 정수를 입력하시면 덧셈결과가 출력됩니다. \n");
printf("자! 그럼 두 개의 정수를 입력하세요. \n");
}
※ 반환형이 void로 선언된 함수에서도 return문을 삽입할 수 있다. ( return; )
2. 함수의 선언
일반적으로 함수는 호출되기 전에 미리 정의되어야 한다.
but 함수를 선언하면 정의하기 전에 호출 가능
int Increment(int); /함수의 선언/
int main(void)
{
int num=2;
num = Increment(num); /함수의 호출/
return 0;
}
int Increment(int n) /함수의 정의/
{
num++;
return n;
}
p. 221 09-1 문제 1
(풀이)
(해설)
→ 조건 연산자를 활용해 코드를 더 간결하게 짤 수 있다.
p. 221 09-1 문제 3
09-2 지역변수
지역변수: 중괄호 내에 선언되는 모든 변수로, 선언된 지역에 한해 유효하다.
→ 해당 지역을 벗어나면 자동으로 소멸
→ 함수 정의 시 사용되는 매개변수를 포함
→ 선언된 지역이 다르면 변수 이름이 같아도 문제되지 않음
→ 지역변수는 외부에 선언된 동일한 이름의 변수를 가림
int main()
{
int num =1;
if (num==1)
{
int num=7;
num+=10;
printf("if문 내 지역변수 num: %d ", num);
}
printf("main 함수 내 지역변수 num: %d", num);
return 0;
}
결과: if문 내 지역변수 num: 17 main 함수 내 지역변수 num: 1
09-3 전역변수, static 변수, register 변수
1. 전역변수
→ 프로그램 전체 영역 어디서든 접근이 가능함
→ 별도의 값으로 초기화하지 않으면 0으로 초기화됨
→ 변수 선언 시 어떠한 중괄호에도 포함되지 않음
→ 전역변수와 동일한 이름의 지역변수 선언 시, 해당 지역 내에서는 전역변수가 가려짐
※ 전역변수의 수가 증가할수록 프로그램은 복잡해지기 때문에, 전역변수의 선언은 신중해야 함
2. static 변수
→ 지역변수에 static 선언 시 전역변수의 성격을 지니게 됨
→ 선언된 함수 내에서만 접근 가능 (지역변수 특성)
→ 딱 1회 초기화되고 프로그램 종료 시까지 메모리에 존재 (전역변수 특성)
→ 초기화하지 않을 시 0으로 초기화 (전역변수 특성)
3. register 변수
→ 레지스터에 저장돼 접근이 빠름
→ register 선언을 추가해도 컴파일러의 판단에 따라 레지스터에 할당되지 않을 수도 있음
→ 전역변수는 register 선언 불가
p. 237 09-2 문제 1
09-4 재귀함수
재귀함수: 함수 내에서 자기 자신을 다시 호출하는 함수
- 재귀함수를 이용해 팩토리얼 함수 만들기
Author And Source
이 문제에 관하여(윤성우의 열혈 c 프로그래밍 Chapter 9 C언어의 핵심! 함수!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kwonminj1113/윤성우의-열혈-c-프로그래밍-Chapter-9-C언어의-핵심-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)