C 언어 함수포인터와 함수포인터배열

함수를 인자로 넘겨주기 위해서 사용된다.
callback의 개념과 비슷하다고 보면 될 것 같다..


#include <stdio.h>

int add(int value1, int value2);
int substract(int value1, int value2);
int multiply(int value1, int value2);

int (*func_array[3])(int, int) = {add, substract, multiply};

int main()
{
        int (*pfunc_pointer) (int, int) = NULL;

        int result = 0;
        int value1 = 0;
        int value2 = 0;
        int type =0;

        printf("첫 번째 값은? " );
        scanf("%d", &value1);

        printf("두 번째 값은? ");
        scanf("%d", &value2);

        printf("계산 방식(0: 더하기, 1: 빼기, 2: 곱하기)은 ? ");
        scanf("%d", &type);

        if(type >= 0 && type <= 2)
        {
                pfunc_pointer = func_array[type];
                result = pfunc_pointer(value1, value2);
                printf("결괏값 : %d\n", result);
        }
        else
        {
                printf("지원하지 않는 계산 방식입니다.\n");
        }
}

int add(int value1, int value2)
{
        return value1 + value2;
}

int substract(int value1, int value2)
{
        return value1 - value2;
}

int multiply(int value1, int value2)
{
        return value1 * value2;
}


실행 시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./dyn_func_call
첫 번째 값은? 5
두 번째 값은? 10
계산 방식(0: 더하기, 1: 빼기, 2: 곱하기)은 ? 2
결괏값 : 50
ndgndg91@LAPTOP-CCFK7MKV:~$ ./dyn_func_call
첫 번째 값은? 5
두 번째 값은? 10
계산 방식(0: 더하기, 1: 빼기, 2: 곱하기)은 ? 0
결괏값 : 15




#include <stdio.h>

int add(int value1, int value2);
int substract(int value1, int value2);
int do_it(int (*func_pointer)(int,int), int value1, int value2);


int main()
{
        int result = 0;
        int value1 = 0;
        int value2 = 0;

        printf("첫 번째 값은? " );
        scanf("%d", &value1);

        printf("두 번째 값은? ");
        scanf("%d", &value2);

        result = do_it(add,value1, value2);
        printf("결괏값 : %d\n", result);

        result = do_it(substract, value1, value2);
        printf("결괏값 : %d\n", result);

}

int add(int value1, int value2)
{
        return value1 + value2;
}

int substract(int value1, int value2)
{
        return value1 - value2;
}

int do_it(int (*func_pointer)(int, int), int value1, int value2)
{
        return func_pointer(value1,value2);
}



실행 시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./practice7
첫 번째 값은? 10
두 번째 값은? 5
결괏값 : 15
결괏값 : 5

댓글

이 블로그의 인기 게시물

Spring Boot Actuator readiness, liveness probes on k8s

About Kafka Basic

sneak peek jitpack

About idempotent

About G1 GC

About ZGC

About JVM Warm up

I need to know a little JVM

HackerRank Java Between Two Sets

Java - HashMap (feat. LinkedList, Tree.. maybe Later)