본문 바로가기
programing/C++

함수 포인터

by RedWiz 2015. 6. 8.

- 함수를 가리키는 포인터

 

- 리턴타입 (* 변수명)(인수 목록)

 

int func(int a);

int (*pf)(int);    // func()를 가리킬 수 있는 함수 포인터 변수

   //변수명의 괄호를 빼버리면  정수형 포인터를 리턴하는 함수가 됨

 

void func(int a, double b);    -> void (*pf)(int, double);

char *func(char *a, int b);    -> char *(*pf)(char *, int);

void func(void);                   -> void (*pf)(void);

 

// 이렇게 하고 나서

pf = func;     // 대입

 

(*pf)(2);      // 호출     (원칙)

pf(2);          // 간략 호출 (지원안 할 가능성 있음)

 

- 함수 포인터 타입

> 포인터 타입 안맞은채 대입시 에러

 

int (*pf1)(char *)    =>    ( int (*)(char *) )

// 1. 변수명을 지움    2. 전체를 괄호로 감쌓음

 

> 길어서 typedef으로 따로 정의하기도 함

 

- 함수 포인터 호출하는 경우

1> 선택해야 하는 함수가 두 개이상인 경우, 예를 ㄷ르어 수십개의 함수 중 하나를 호출시 함수 포인터 배열을 선언하고 그 첨자를 선택하는 것이 더 쉬움

 

2> 함수를 선택하는 시점과 실제로 호출하는 시점이 완전히 분리되어 있는 경우, 호출할 함수에 대한 조건 점검은 필요할 때 한 번하고 선택된 함수는 별 다른 조건 점검없이 함수 포인터를 쓰는 것이 유리함

 

3> 호출할 함수가 DLL 같은 외부 모듈에 있고 이 함수를 동적으로 연결할 경우, 컴파일할 때 함수의 존재가 알려지지 않을 때 사용. 함수 포인터를 사용하면 이름으로 원하는 함수의 번지를 찾아 호출할 수 있음.

 

- 함수 포인터 인수

> 함수의 인수로도 사용 할 수 있음

ex) void qsort( void *base, size_t num, size_t width,

int (*compare)(const void*, const void*) );

 

- 함수 포인터 리턴

 

fp의 리턴타입 ( *함수명 (인수목록))(fp의 인수목록)

 

int (*SelectFunc(char ch))(int, double)

{

if(ch == 'a')

{

return f1;

}

else

{

reutn f2;

}

}

 

'programing > C++' 카테고리의 다른 글

형 변환 (type cast)  (0) 2015.06.09
함수 객체  (0) 2015.06.08
가변 인수 함수  (0) 2015.06.08
[펌] Modern C++ 프로그래머를 위한 CPP11/14 핵심  (0) 2015.06.03
[펌] Let`s learn ! Effective C++  (0) 2015.06.03