반응형
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, ...}; |
콜백 | 함수의 인자로 함수 포인터 전달 |
🎯 실습 과제
- 함수 포인터를 이용해 min, max 함수 호출해보기
- 사용자 선택에 따라 다양한 연산을 수행하는 계산기 구현
- 함수 포인터 배열을 활용한 메뉴 선택 기능 만들기
🗣 다음 주 예고: 문자열 심화와 포인터 – strcpy, strlen, strcmp 완벽 정리!
다음 강의에서는 C언어의 문자열 처리 함수들과
문자열을 포인터로 자유자재로 다루는 방법을 다룹니다.
char *의 실전 마스터 과정, 기대해주세요!
반응형
'C언어 > C 언어 중급' 카테고리의 다른 글
중급7강_C언어 구조체(struct) 기초 완벽 정리 – 데이터를 묶는 강력한 방법 (0) | 2025.04.21 |
---|---|
중급6강_C언어 문자열 함수 완전 정리 – 포인터로 문자열을 자유자재로 다루자! (0) | 2025.04.21 |
중급4강_C언어 포인터 배열과 2차원 배열 완전정복 – 메모리 구조 깊이 파헤치기! (0) | 2025.04.21 |
중급3강_C언어 동적 메모리 할당 완벽 가이드 – malloc부터 free까지 한 번에! (0) | 2025.04.20 |
중급2강_C언어 포인터와 배열, 문자열 완전 이해하기 – 메모리 접근의 핵심 원리! (0) | 2025.04.20 |