본문 바로가기
Programming/C/C++

함수 포인터 사용

by bbolmin 2012. 9. 23.

함수 포인터는 말 그래도 함수를 가리키는 포인터이다.  . .

 

 

#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