(C++) 7.5 함수 포인터

이준우·2021년 11월 14일
0

지금까지 우리가 배운 포인터들은 변수에 대한 포인터였다. 이젠 함수에 대한 포인터도 알아보자.
함수는 5를 반환하는 아주 기본적인 함수이다. 이를 cout를 이용하여 func를 출력하면 어떻게 될까? 메모리 주소가 나오게 된다. 함수도 결국엔 메모리에 들어가 있기 때문에 이러한 결과가 출력된다.


위의 결과를 통해 우리는 함수도 메모리를 갖는 것을 알게 되었다. 그렇다면 이 함수를 포인터를 사용하여 뭔가 동작하게 만들 수 있지 않을까? 실제로 실험을 해보자.
포인터 함수에 func를 넣고 출력을 하면 당연히 5가 나온다. 또한 다음 줄을 보면 변수에 다른 값을 넣어 초기화를 할 수 있는 것처럼, 포인터 함수에도 다른 함수를 넣어 초기화를 할 수 있다.

만약 주소를 출력하고 싶다면 위와 같은 형식으로 출력하면 되고, console에 4 byte가 차이나는 것은 포인터가 4byte씩 주소를 갖기 때문에 그렇다.


이러한 짝수와 홀수를 출력하는 코드가 있다고 가정하자. 이를 포인터 함수로 바꿔보자!
좀 이해하기 어려울 수도 있을 것 같다. 포인터 함수이다 보니 매개변수는 주소를 받을 수 있는 참조형식의 매개변수를 사용한다.

main문에서 printNumber(my_array, isEven)에서 isEven 함수를 넣은 것을 보아야 하고, 이렇게 사용할 수 있는 이유는, printNumber()의 매개변수에서 bool(*check_fcn)과 같이 포인터 함수를 매개변수로 받도록 하기 때문에 가능하다. 함수이름만 넣었는데도 포인터로 받을 수 있는 이유는 위에서 설명한대로 함수의 이름 자체가 메모리 주소를 갖기 때문에 가능하다.


#include <functional>을 사용하여 쓰기도 하는데, 요즘 많이 사용하는 추세이다.

0개의 댓글