본문 바로가기
IVS/C 프로그래밍

[C] 함수 포인터

by 코곰_ 2025. 1. 13.

 

함수포인터

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

- 다른 함수의 주소를 저장할 수 있는 포인터 

- 함수 포인터와 저장될 함수의 반환값 자료형, 매개변수 자료형과 개수가 일치해야 한다. 

 

 

예시

#include <stdio.h> 
#include <stdint.h>
uint8_t addOne(uint8_t value) { 
    return value + 1;
}
int main() {
    typedef uint8_t (*FP_uint8_t_uint8_t)(uint8_t);
    FP_uint8_t_uint8_t myFunctionPointer = addOne;
    uint8_t result = myFunctionPointer(5);
    printf("Result: %u\n", result);
    return 0;
}

 

 

(연습) 사칙연산 실습

1. Subtract / multiply / divide 함수를 선언

2. 두개의 정수와, 연산자를 입력 받음
3. 함수 포인터를 사용하여 연산을 수행
4. 그 결과를 출력

#include <stdio.h>
int add(int a, int b) { 
    return a + b;
}
//subtract 함수 선언
int subtract(int a, int b){
    return a-b;
}
//multiply 함수 선언
int multiply(int a, int b){
    return a*b;
}
//divide 함수 선언
int divide(int a, int b){
    return a/b;
}

int main() {
    int (*operation)(int, int); // 함수 포인터 선언

    int num1, num2;
    char operator;

    printf("두 정수를 입력하세요: ");
    scanf("%d %d", &num1, &num2);

    printf("연산자를 선택하세요 (+, -, *, /): ");
    scanf(" %c", &operator);

    switch (operator)
    {
    case '+':
        operation = add;
        break;
    case '-':
        operation = subtract;
        break;
    case '*':
        operation = multiply;
        break;
    case '/':
        operation = divide;
        break;
    default:
        printf("올바르지 않은 입력값입니다.\n");
        break;
    }
    int result = operation(num1, num2); 
    printf("결과: %d\n", result);
    return 0;
}



왜 쓰일까?

- 콜백(call back) 매커니즘을 구현할 때, 함수를 또 다른 함수의 인자로 넘겨주기 위해

- 여러 개의 함수를 배열로 관리하고자 할 때