프로그래밍 언어/C언어

C언어 예시를 통해서 함수포인터 알아보기

원원 2022. 3. 4. 22:45

안녕하세요. 오늘은 C언어 함수포인터를 알아보겠습니다

함수포인터란 포인터를 만들어서 함수에게 사용하는것 입니다

 

예시1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
 
char func(int i, int j , char c) 
{
    return i+j+c;
}
 
int main()
{
    char (*p)(int,int,char); // 반환형 (*변수명)[전달인자];
    p = func;
    printf("%d \n",func(1,2,3));
    printf("%d \n",p(1,2,3));
}
 
cs

결과값

6

6

11번줄에서 함수포인터를 만듭니다. 주석에 나와있는 포맷을 사용하면 됩니다

12번줄에 func함수를 함수포인터p가 가리킵니다

14번줄에서 함수포인터로 함수를 불러옵니다

 

예시2) 함수가 여러 개 있는데 함수를 일일이 작성하지 않고 불러오는 방법이 있습니다. 함수포인터를 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
void func1(char c)
{
    printf("값:%d \n",c);
}
void func2(char c)
{
    printf("값:%d \n",c);
}
void func3(char c)
{
    printf("값:%d \n",c);
}
void func4(char c)
{
    printf("값:%d \n",c);
}
 
int main()
{
    void (*p_func[4])(char= {func1,func2,func3,func4}; // 반환형 (*변수명[배열개수])(전달인자);
    int i;
    
    for(i=0;i<2;i++)
        p_func[i](i);
    printf("-----------------------------------\n");
    for(i=0;i<4;i++)
        p_func[i](i);
}
cs

결과값

값:0
값:1
-----------------------------------
값:0
값:1
값:2
값:3

22번째줄에서 함수포인터를 배열로 만듭니다. 

26번째줄에서 p_func[0][0], p_func[1][1]을 호출합니다

27번째줄에서 p_func[0][0], p_func[1][1], p_func[2][2], p_func[3][3] 을 호출합니다

 

또 다른 예제

#include <stdio.h>
#define FUNC1
//#define FUNC2
//#define FUNC3

typedef ptrFunc(int a, int b);

#if defined FUNC1
int func(int a, int b)
{
   return a+b;
}
#elif defined FUNC2
int func(int a, int b)
{
   return a-b;
}
#elif defined FUNC3
int func(int a, int b)
{
   return a*b;
}
#endif

int calc(ptrFunc* ptr, int num1, int num2)
{
   return ptr(num1,num2);
}

int main()
{
   printf("Func : %d \n", calc(func,34,32));
   
}

 

main함수에서 매개변수를 func함수로 사용하는데 func함수는 FUN1,FUN2,FUN3가 define된거에따라 내용이 다릅니다.