포인터란 어떤 변수의 주소를 가리켜 그 변수에 접근 하는 방법이다.
함수에도 포인터가 있다. 변수의 포인터와 개념은 똑같다. 함수에도 주소가 존재하기때문에 포인터로 함수의 주소를
가리킬 수 있다.
어떻게 사용하는지 보자.
반환값형식 (*포인터함수명)(시그니쳐) ;
쉽게 예제를 보자.
void test();
void (*ptr)();
(*ptr) = &test; // 포인터 함수의 생성
(*ptr)(); //포인터함수의 호출
위의 예제는 test 함수의 포인터 함수 ptr를 생성하는 과정을 보여주었다. 호출의 경우 (*ptr)() 대신에 ptr() 으로도 사용이 가능하지만 이경우 이 함수가 포인터 함수인지 아닌지는 알수 없으니 사용을 자제해야한다.
포인터 함수의 중요한 점은 가리키려는 함수와 시그니쳐, 반환값이 같아야 한다는 것이다.
반환값이 void 형식인데 포인터 함수는 int 형 이면 안된다.
하지만 만약, 포인터함수를 많이 써야하는 경우라면 쓸때마다 저렇게 만들어서 써야하지는 않다. 그 경우를 위해
typedef 가 있다. 이는 함수의 형태는 같은 함수가 많고 포인터 함수를 많이 쓰는 경우에 쓸 수 있다 .
어떻게 쓰는지 살펴보자.
typedef 반환값형식 (*이름)(시그니쳐)
의 형태로 사용 할 수 있다. 예제를 보자.
typedef void (*func) () ;
func 함수명;
이로써 void형식에 시그니쳐가 없는 함수명의 이름을 가진 포인터함수가 생성되었다. 위와 같은 형태로 사용하면 된다.
'!? > C++' 카테고리의 다른 글
문자열(string) (1) | 2012.08.12 |
---|---|
동적메모리 할당 (0) | 2012.08.11 |
함수의 재귀호출 (0) | 2012.08.11 |
함수 (0) | 2012.08.11 |
c/c++ 의 꽃 포인터 (0) | 2012.07.05 |