반응형
함수의 시작 주소를 가리키는 포인터로, 실행 도중 특정 함수를 동적으로 선택하여 실행할 수 있다. C#의 delegate와 비슷하다
선언 형식은 다음과 같다
<반환형> (*<변수명>)(<매개변수 목록>);
오른쪽 - 왼쪽 규칙으로 해석한다
함수 포인터 또한 객체이기 때문에 배열에 담을 수 있다
#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 divide(int a, int b)
{
/* 0으로 나눌 때는 예외 처리가 필요하지만, 여기서는 단순히 처리 */
return b == 0 ? 0 : a / b;
}
int main(void)
{
/* 1) 함수 포인터 선언 */
/* int (*op)(int, int); --> op는 int형 두 개를 받는 함수를 가리키는 포인터 */
/* 2) 여러 함수 포인터를 배열에 담기 */
/* ops[i]는 (int, int) -> int 형태의 함수를 가리키는 포인터 */
int (*ops[])(int, int) = { add, sub, mul, divide };
/* 3) 사용자 입력 예시 */
int x, y;
int choice;
printf("두 정수를 입력하세요: ");
scanf("%d %d", &x, &y);
printf("연산을 선택하세요 (0: add, 1: sub, 2: mul, 3: divide): ");
scanf("%d", &choice);
/* 4) 배열에서 해당 인덱스의 함수 포인터를 가져와 호출 */
if (choice >= 0 && choice < 4) {
int result = ops[choice](x, y);
printf("결과: %d\n", result);
} else {
printf("잘못된 선택입니다.\n");
}
return 0;
}
================ 실행 결과 ================
두 정수를 입력하세요: 10 3
연산을 선택하세요 (0: add, 1: sub, 2: mul, 3: divide): 2
결과: 30
Reference
'프로그래밍 > C, C++' 카테고리의 다른 글
C 언어 void 포인터 (void*) (0) | 2025.04.10 |
---|---|
C 언어 공용체 (union) (0) | 2025.04.10 |
C 구조체와 비트 플래그 (0) | 2025.04.10 |
C 구조체 사용 시 포인터 저장 문제 (0) | 2025.04.09 |
C 언어의 구조체 (0) | 2025.04.09 |