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

댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째