본문 바로가기
!?/C++

함수의 포인터

by Where's my namespace 2012. 8. 11.

포인터란 어떤 변수의 주소를 가리켜 그 변수에 접근 하는 방법이다.

 

함수에도 포인터가 있다. 변수의 포인터와 개념은 똑같다. 함수에도 주소가 존재하기때문에 포인터로 함수의 주소를

가리킬 수 있다. 

어떻게 사용하는지 보자.

반환값형식  (*포인터함수명)(시그니쳐) ;

쉽게 예제를 보자.

 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