본문 바로가기
C언어/C 언어 중급

중급5강_C언어 함수 포인터 완전정복 – 콜백 함수의 핵심 개념 쉽게 배우기!

by AI쌤 2025. 4. 21.
반응형

C언어에서는 함수도 주소를 가지며, 이 주소를 변수처럼 다룰 수 있습니다.
바로 그 핵심이 **함수 포인터(Function Pointer)**입니다.
이번 강의에서는 함수 포인터의 선언부터 사용, 콜백 함수 구현까지
실무 중심 예제로 완벽하게 정리해드립니다!


🧠 함수 포인터란?

함수의 주소를 저장하고, 그 주소를 통해 함수를 호출할 수 있게 해주는 포인터입니다.


📌 함수 포인터 기본 문법

반환형 (*포인터이름)(매개변수 목록);

✅ 예시

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

int (*func_ptr)(int, int) = add;
printf("%d\n", func_ptr(3, 4));  // 출력: 7

✔ func_ptr은 add() 함수의 주소를 담고 있음
✔ 함수 호출 시 func_ptr(3, 4)처럼 사용 가능


🧪 함수 포인터 활용 – 콜백 함수 기본 예제

void hello() {
    printf("Hello!\n");
}

void execute(void (*f)()) {
    f(); // 전달된 함수 실행
}

int main() {
    execute(hello);  // 출력: Hello!
}

✅ 함수 포인터는 콜백 함수(callback) 구현에 활용됩니다
→ 함수 주소를 인자로 넘겨 원하는 시점에 실행 가능


🔄 함수 포인터 배열

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

int (*ops[2])(int, int) = {add, sub};

printf("%d\n", ops[0](10, 5));  // 15
printf("%d\n", ops[1](10, 5));  // 5

✔ 여러 함수들을 배열로 관리하고
✔ 인덱스 또는 조건에 따라 동적으로 호출 가능


💻 실전 응용: 간단한 계산기 만들기

#include <stdio.h>

int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int divi(int a, int b) { return b != 0 ? a / b : 0; }

int main() {
    int (*calc[4])(int, int) = {add, sub, mul, divi};
    int choice, x, y;

    printf("0:Add 1:Sub 2:Mul 3:Div >> ");
    scanf("%d", &choice);
    printf("Enter two numbers: ");
    scanf("%d %d", &x, &y);

    printf("Result: %d\n", calc[choice](x, y));
    return 0;
}

📘 함수 포인터 요약 정리

내용 설명

선언 int (*fp)(int, int);
대입 fp = 함수이름;
호출 fp(매개변수);
배열 함수 포인터 배열[] = {함수1, 함수2, ...};
콜백 함수의 인자로 함수 포인터 전달

🎯 실습 과제

  1. 함수 포인터를 이용해 min, max 함수 호출해보기
  2. 사용자 선택에 따라 다양한 연산을 수행하는 계산기 구현
  3. 함수 포인터 배열을 활용한 메뉴 선택 기능 만들기

🗣 다음 주 예고: 문자열 심화와 포인터 – strcpy, strlen, strcmp 완벽 정리!

다음 강의에서는 C언어의 문자열 처리 함수들과
문자열을 포인터로 자유자재로 다루는 방법을 다룹니다.
char *의 실전 마스터 과정, 기대해주세요!

반응형