48. C++ 함수 포인터

C++ 함수 포인터

1. 개요

1.1 문서 개요

이 문서는 C++의 함수 포인터(Function Pointer)에 관해 기록하는 문서입니다. 함수 포인터는 프로그램 실행 중에 함수를 동적으로 선택하고 호출하는 메커니즘을 제공합니다. 또한 포인터 함수(Pointer Function)와의 개념적 차이점에 대해서도 비교합니다.

2. 내용

2.1 함수 포인터의 정의

2.1.1 정의

함수 포인터는 함수의 주소를 저장할 수 있는 포인터입니다. 함수를 인자로 전달하거나 배열에 저장하는 등 다양한 동적 함수 호출에 사용됩니다.

2.2 함수 포인터 선언과 사용

2.2.1 선언 방식

int add(int a, int b) {
    return a + b;
}
int (*funcPtr)(int, int) = add;

2.2.2 함수 호출 방식

int result = funcPtr(3, 4); // 결과: 7

2.3 함수 포인터를 활용한 구조

2.3.1 함수 포인터 배열

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }

int (*ops[])(int, int) = { add, sub };
int r1 = ops[0](10, 5); // 15
int r2 = ops[1](10, 5); // 5

2.3.2 함수 포인터와 콜백

함수 포인터는 콜백 함수 구현 시 자주 사용됩니다. 예를 들어 정렬 함수에서 비교 함수를 매개변수로 전달할 수 있습니다.

void sort(int* arr, int size, bool (*compare)(int, int)) {
    // 비교 함수 기반 정렬 로직
}

2.4 (번외) 함수 포인터 vs 포인터 함수

2.4.1 포인터 함수란

포인터 함수는 함수가 포인터를 반환하는 함수입니다. 즉, 반환형이 포인터입니다.

int* getPointer() {
    static int x = 10;
    return &x;
}

2.4.2 함수 포인터와의 비교

구분 함수 포인터 포인터 함수
의미 함수의 주소를 저장하는 포인터 포인터를 반환하는 함수
선언 방식 int (*fptr)(int) int* func()
사용 목적 함수 호출의 동적 처리 포인터 값 반환

2.4.3 혼동 방지 예시

  • int *func(); → 포인터를 반환하는 함수
  • int (*funcPtr)(); → 함수 포인터

3. 마무리

C++ 함수 포인터는 함수의 주소를 저장하고 동적으로 호출할 수 있는 메커니즘입니다. 다형적인 함수 호출, 콜백 구조 구현, 함수 배열 처리 등 다양한 유연한 설계에 활용될 수 있으며, 함수 서명을 정확히 일치시키는 것이 사용상의 핵심 조건입니다. 포인터 함수는 이와는 다른 개념으로, 함수의 반환값이 포인터일 때 사용되며 함수 포인터와는 구문상 유사하지만 역할이 다릅니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤