- 함수를 가리키는 포인터
- 리턴타입 (* 변수명)(인수 목록)
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 |