북극곰의 개발일기

C99에서의 함수포인터 사용





posted by purplebeen on Sat Oct 20 2018 23:18:12 GMT+0900 (KST) in C


C에서의 함수 포인터 사용

시험이 코앞이라 시험 공부를 하다가, 고등학교때에는 배우지 않았던 내용이라 정리할 필요가 있을거 같아서 정리한다.

함수포인터

  • 하나의 함수를 여러 목적으로 유연하게 사용하고자 할때 유용
  • 유지보수가 용이
  • 함수 명 자체가 함수 포인터

함수포인터의 선언

형 (*변수명) (매개변수 목록)

  • 형 : 함수 포인터가 가리키는 함수의 리턴형
  • 변수명 : 함수 포인터 명
  • 매개변수 목록 : 함수 포인터가 가리키는 함수의 매개변수 목록
ex) int (*fp) (int, int);

함수포인터 예제

사용자의 입력에 따라서 두 수의 곱 또는 두 수의 합을 출력하는 프로그램이다.
두 수의 합을 리턴하는 함수와 두 수의 곱을 리턴하는 함수 모두 매개변수 목록과 함수의 리턴형이 같으므로, 함수 포인터를 사용하면 보다 유연하게 프로그램을 작성할 수 있을것이다.

#include <stdio.h>

int sum(int, int);
int mul(int, int);

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 main(void) {
	int num;
	printf("1. 두 정수의 합 \n");
	printf("2. 두 정수의 곱\n");

	scanf("%d", &num);

	switch (num) {
	case 1:
		func(sum);
		break;
	case 2:
		func(mul);
		break;
	}

	return 0;
}

int sum(int a, int b) {
	return a + b;
}

int mul(int a, int b) {
	return a * b;
}

func()에서 인자값으로 함수 포인터를 넘겨 중복되는 코드를 제거하였고, 가독성도 훨씬 좋아진 것을 볼 수 있다.