http://www.yes24.com/Product/Goods/74269921
혼자 공부하는 C 언어 - YES24
혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학
www.yes24.com
함수 포인터는 함수의 형태만 같으면 기능과 상관없이 모든 함수에 사용할 수 있습니다. 따라서 형태가 같은 다양한 기능의 함수를 선택적으로 호출할 때 사용합니다.
#include <stdio.h>
void func(int (*fp)(int, int)); // 함수 포인터를 매개변수로 갖는 함수
int sum(int a, int b); // 두 정수를 더하는 함수
int mul(int a, int b); // 두 정수를 곱하는 함수
int max(int a, int b); // 두 정수 중에 큰 값을 구하는 함수
int main(void)
{
int sel; // 선택된 메뉴 번호를 저장할 변수
printf("01. 두 정수의 합\n"); // 메뉴 출력
printf("02. 두 정수의 곱\n");
printf("03. 두 정수 중에서 큰 값 계산\n");
printf("원하는 연산을 선택하세요 : ");
scanf("%d", &sel); // 메뉴 번호 입력
switch(sel)
{
case 1: func(sum); break; // 1이면 func에 덧셈 기능 추가
case 2: func(mul); break; // 2이면 func에 덧셈 기능 추가
case 3: func(max); break; // 3이면 func에 덧셈 기능 추가
}
return 0;
}
void func(int (*fp)(int, int))
{
int a, b; // 두 정수를 저장할 변수
int res; // 함수의 반환값을 저장할 변수
printf("두 정수의 값을 입력하세요 : ");
scanf("%d%d, &a, &b"); // 두 정수 입력
res = fp(a,b) // 함수 포인터로 가리는 함수를 호출
printf("결과값은 : %d\n", res); // 반환값 출력
}
int sum(int a, int b)
{
return (a +b)
}
int mul(int a, int b)
{
return (a *b)
}
int max(int a, int b)
{
if (a>b) return a;
else return b;
}
이 프로그램은 함수를 정의할 때 일부를 구현하지 않고 함수가 호출될 때 그 기능을 결정합니다.
func 함수 안에서는 함수 포인터인 매개변수 fp가 함수명을 저장하여 해당 함수를 가리키므로 fp를 통해 해당 기능을 가진 함수를 호출할 수 있습니다.
어떤 경우에 함수 포인터를 써야 할까요?
굳이 함수 포인터를 쓰지 않아도 func 함수는 필요한 함수를 직접 호출하여 같은 기능을 하는 코드를 만들 수 있습니다. 그러나 만약 func 함수만 따로 만드는 경우 만드는 시점에서 연산 방법을 결정할 수 없다면 일단 함수 포인터를 쓰고 나중에 func 함수를 호출하는 곳에서 연산 방법을 함수로 구현할 수 있습니다. 그 밖에 하나의 프로그램이 여러 개의 파일로 분리되어 있는 경우 다른 파일에 있는 정적 함수를 호출하는 방법으로 함수 포인터를 쓸 수 있습니다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
| [혼자 공부하는 C언어] void 포인터 (0) | 2022.12.16 |
|---|---|
| [자료구조 및 알고리즘 입문] 재귀 알아보기 (0) | 2022.12.15 |
| [혼자 공부하는 C언어] 함수 포인터의 개념 (0) | 2022.12.15 |
| [혼자 공부하는 C언어] 2차원 배열과 배열 포인터 (0) | 2022.12.13 |
| [혼자 공부하는 C언어] 배열 요소의 주소와 배열의 주소 (0) | 2022.12.13 |