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
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
댓글
댓글 쓰기