C++

C++ 함수 포인터

코딩샐러드 2022. 12. 14. 21:52

C++ 함수 포인터

프로그래밍에서 함수를 많이 사용하게 되는데요.
생성해둔 함수는 메모리 영역 어떤 위치에 존재하게 됩니다.
그렇다면 어떤 메모리 주소에 있는지에 대해서 알 수 있다면, 포인터를 활용하여 호출할 수 있게 됩니다. 함수를 가리키는 포인터를 바로 함수 포인터라고 합니다.

그러면 바로 사용법을 알아보겠습니다.

int sum( int a, int b) 라는 함수를 가리키는 함수 포인터를 만들어 보겠습니다.
함수 포인터를 생성하는 방법은 아래와 같습니다.

#include <iostream>

int sum(int a, int b){
    return a+b;
}

int main(){
    // 함수 포인터 사용하기 위하여 선언
    int (*pointer_to_sum_function)(int, int) = sum;
    // 함수 포인터 사용 -> 역참조로 사용
  std::cout << (*pointer_to_sum_function)(1,2) << std::endl;
}

함수를 호출할 때는 역참조를 통해서 호출 하면 되요.

위 코드를 실행하면 sum 함수의 동작이 실행 되는 것을 알 수 있습니다.

C에서 함수포인터는 위와 같이 사용하면 되겠고, C++ 에는 레퍼런스가 존재하잖아요?

함수 레퍼런스를 사용하는 것도 가능합니다!
레퍼런스를 표시할 떄는 & 기호를 사용하니까, 위 코드에서 *** 기호를 **&로 대체하면 됩니다.

#include <iostream>

int sum(int a, int b){
    return a+b;
}

int main(){
    // 함수 레퍼런스를 사용하기 위하여 선언
    int (&pointer_to_sum_function)(int, int) = sum;
    // 함수 레퍼런스 사용 -> 역참조 없이도 사용 가능
  std::cout << pointer_to_sum_function(1,2) << std::endl;
}