안녕하세요. 오늘은 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된거에따라 내용이 다릅니다.
'프로그래밍 언어 > C언어' 카테고리의 다른 글
gcc를 이용해서 빌드를 Make로 하기 (0) | 2024.07.14 |
---|---|
예시로 알아보는 volatile 한정자 (0) | 2022.01.12 |
C언어 Storage Class, Auto, Register, Extern, Static이란? (0) | 2022.01.10 |
C언어로 지수구하기 (0) | 2021.12.20 |
포인터 활용하기 (0) | 2021.08.07 |