매개변수가 없는함수
예를 들어 키보드로 수를 입력해서 양수를 반환하는 함수를 만든다면 호출한 함수로부터 값을 받을 필요가 없으므로 매개변수도 필요 없게 된다
#include <stdio.h>
int get_num(void);
int main(void)
{
int result;
result = get_num();
printf("반환값: %d", result);
return 0;
}
int get_num(void) // 매개변수는 없고 반환형만 있다
{
int num;
printf("양수 입력: ");
scanf("%d", &num);
return num; // 반환형
}
반환값이 없는 함수
데이터를 받아서 단지 화면에 출력하는 함수라면 특별히 반환값이 필요 없다
#include <stdio.h>
void print_char(char ch, int cnt);
int main()
{
print_char('@', 5);
return 0;
}
void print_char(char ch, int cnt) // 매개변수는 있으나 반환형이 없다
{
for (int i = 0; i < cnt; i++)
{
printf("%c", ch);
}
return; // 반환형이 없다
}
매개변수와 반환값이 모두 없는 함수
일정한 문자열을 여러 번 출력하는 함수라면 매개변수와 반환값이 모두 필요 없다
void 함수명(void)
이렇게 함수의 원형을 정의하면 매개변수와 반환값이 모두 없다
#include <stdio.h>
void printf_line(void);
int main(void)
{
printf_line();
printf("학번 이름 전공 학점\n");
printf_line();
return 0;
}
void printf_line(void)
{
int i;
for (i = 0; i < 50; i++)
{
printf("-");
}
printf("\n");
}
재귀호출 함수
함수 안에서 자기자신을 호출하는 함수
#include <stdio.h>
void fruit(void);
int main(void)
{
fruit();
return 0;
}
void fruit(void)
{
printf("apple\n");
fruit(); // 함수 안에서 자기자신을 호출함
}
Q. 무한으로 apple 이 출력되지 않는 이유
A. 함수는 호출만으로 일정 크기의 메모리를 사용하므로 무한 호출하면 프록그램 하나가 쓸 수 있는 메모리(해당 프로세스에 할당된스택 메모리)를 모두 사용하여 강제 종료되기 때문이다
재귀호출 응용 예시
#include<stdio.h>
void fruit(int count);
int main(void)
{
fruit(1);
return 0;
}
void fruit(int count)
{
printf("apple\n");
if (count == 3) return;
fruit(count + 1);
printf("jam\n");
}
0 ~ 3 번
까지는 복사본들을 새로 호출해준다면
4 ~ 5 번
return 때문에 이전 함수의 호출 위치로 반환되고
6 번
재귀함수가 끝나고 main 함수로 돌아오게 된다
재귀호출과 반복문의 차이점
- 재귀호출은 하나의 함수에서 코드를 반복 실행하는 듯하지만 실제로는 새로운 함수를 실행하는 것과 같다
- 경우에 따라 복잡한 반복문을 간단히 표현할 수 있으나 코드 읽기가 쉽지 않고 반복 호출되면서 메모리를 사용하므로 제한적으로 쓰는 것이 좋다
'C 언어 > [책 정리] 혼자 공부하는 C언어' 카테고리의 다른 글
문자를 저장하는 배열 (0) | 2022.12.12 |
---|---|
배열의 선언과 사용 (0) | 2022.12.12 |
함수의 작성과 사용 (0) | 2022.12.08 |
반복문 활용 (0) | 2022.12.07 |
while문, for문, do ~ while 문 (0) | 2022.12.07 |