함수포인터가 필요한이유?
함수포인터를 사용하면 , 함수의 재사용성이 올라간다.
무슨 의미인지 아래 코드를 보면, arrMax안에 2개의 함수포인터를 매개변수로 받게 된다.
함수내에서 (f) , (p) 를 함수포인터로 받아 사용하므로 함수의 가공이 쉬워진다.
함수포인터는 리턴값과 매개변수형식만 같다면 어떠한 형태로든 변경이가능하다.
아래 예시에서는 squreNumber함수와 TripleNumber 가 같다고 볼수있다.
사용자 입력에서 매개변수로 사용하고자하는 함수명만적으면 알아서 변경이 된다.
#include <iostream>
#include <stdio.h>
// 함수포인터를 왜 사용하는가?
// 매개변수로 함수를 받을수 있어, 함수의 재사용성이 올라간다.
int plus(int a, int b)
{
return a + b;
}
int squreNumber(int n)
{
return n * n;
}
int TripleNumber(int n)
{
return n * n * n;
}
int arrMax(int *arr, int n, int(*f)(int), int(*p)(int))
{
int MAX = f(arr[0]);
for (int i = 1; i < n; i++) {
if (f(arr[i]) > MAX)
{
MAX = f(arr[i]);
}
}
return p(MAX); // f함수로 가공하고 결과에 p함수로 처리하여 리턴함
}
int Thundrad(int n)
{
return n * 100;
}
int main()
{
int arr[10] = { 1,2,3,4,5 ,6,-2,-3,-4,-10 };
printf("Max , %d", arrMax(arr, 10, TripleNumber,Thundrad));
/*int (*pf_plus)(int, int);
pf_plus = +
int ans = pf_plus(1, 2);
printf("%d\n", ans);*/
return 0;
}
#include <iostream>
// 함수포인터를 왜 사용하는가?
// 매개변수로 함수를 받을수 있어, 함수의 재사용성이 올라간다.
int plus(int a, int b)
{
return a + b;
}
int squreNumber(int n)
{
return n * n;
}
int TripleNumber(int n)
{
return n * n * n;
}
int arrMax(int *arr, int n, int(*f)(int), int(*p)(int))
{
int MAX = f(arr[0]);
for (int i = 1; i < n; i++) {
if (f(arr[i]) > MAX)
{
MAX = f(arr[i]);
}
}
return p(MAX); // f함수로 가공하고 결과에 p함수로 처리하여 리턴함
}
int Thundrad(int n)
{
return n * 100;
}
int main()
{
int arr[] = { 1,2,3,4,5 };
std::cout << arrMax(arr, 5, squreNumber, TripleNumber) << std::endl;
return 0;
}