함수 포인터(Function Pointer)는 일반 포인터가 변수의 메모리 주소를 저장하듯이, 코드(함수)의 주소를 가리키는 포인터입니다.
함수 포인터에서는 함수 이름 자체가 곧 함수의 시작 주소를 의미하기 때문에, 함수 이름을 사용하여 해당 함수의 주소를 얻을 수 있습니다.
또한 함수 포인터를 활용하면 함수를 다른 함수의 인자(argument)로 전달하거나, 함수의 반환값으로 함수를 리턴하는 것도 가능합니다. 이러한 특성 덕분에 콜백(callback) 함수 구현이나 유연한 코드 설계에 널리 사용됩니다.
선언 방법
함수 포인터는 아래와 같은 형식으로 선언합니다.
반환타입 (*포인터이름)(함수 인자 목록)
괄호 안의 별표(*)가 포인터임을 나타내며, 괄호를 생략하면 함수를 반환하는 일반 포인터로 해석되므로 주의해야 합니다.
예제 코드
#include<stdio.h>
int subtraction(int a, int b) {
return a - b;
}
int main() {
int (*fp)(int, int) = subtraction;
// 함수 포인터를 사용하여 함수 호출
int result = fp(5, 4);
printf("Using function pointer we get the result: %d", result);
return 0;
}실행 결과
Using function pointer we get the result: 1
위 예제에서 fp는 두 개의 정수를 받아 정수를 반환하는 함수를 가리키는 포인터입니다. subtraction이라는 함수 이름을 대입한 뒤, 일반 함수를 호출하듯 fp(5, 4)로 호출하면 결과적으로 subtraction(5, 4)가 실행되어 1이 출력됩니다.