함수 포인터는 말 그래도 함수를 가리키는 포인터이다. . .
#include <stdio.h>
int add(int x, int y)
{
return x+y;
}
void main()
{
int (*padd)(int,int);
padd = add; //함수 포인터 padd는 add라는 함수를 가리킨다.
printf("1 + 3 = %d \n", padd(1, 3));
}
int (*padd)(int,int); 는 함수포인터 padd를 선언했다. padd는 반환형이 int이며 인자값으로 int형 파라미터 2개를 받는 함수 형태에 대해서만 가리킬 수 있다.
나는 쉘 코드 테스트나, DLL에서 GetProcAddress에 주로 사용한다.
GetProcAddress를 사용한다 치면 함수 포인터의 반환형은 (int((*)(int,int)))GetProcAddress(~~) 이런식으로 해야한다.
반환형과 파라미터가 void라면 (void((*)())) 이런식으로 하면된다.
그런데 자주 사용하지 않으면 너무 헷갈린다.
그래도 조금더 나은 방법은 typedef을 사용하는 방법이다.
#include <stdio.h>
typedef int (*pfunc)(int,int);
int add(int x, int y)
{
return x+y;
}
void main()
{
pfunc padd;
padd = add; //함수 포인터 padd는 add라는 함수를 가리킨다.
printf("1 + 3 = %d \n", padd(1, 3));
}
원래 선언하던 방식에 typdef만 더해주면 된다. 함수포인터를 여러개 선언할 때 편하게 쓸 수 있다.
그리고 특히 반환형 캐스팅할 때가 가장 편하다. ㅋ
(int((*)(int,int)))GetProcAddress(~~) --> (pfunc)GetProcAddress(~~) 그냥 이러면 된다.
- 정리하면 -
1)
선언 : int (*padd)(int,int);
캐스팅 : (int((*)(int,int)))
2)
선언 : typedef int (*pfunc)(int,int); -> pfunc padd;
캐스팅 : (pfunc)
'Programming > C/C++' 카테고리의 다른 글
C++ 기초 [1] (0) | 2013.02.26 |
---|---|
Unix 입출력 [ read/write - recv/send ] (0) | 2012.11.30 |
sbrk(), brk() 함수 (0) | 2012.08.06 |
c언어 - 확장 유클리드 알고리즘 (1) | 2012.05.26 |
c언어 - 유클리드 알고리즘 (0) | 2012.05.26 |