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;
}
'C++' 카테고리의 다른 글
프로그래밍 알고리즘 공부 4단계 step-by-step (0) | 2023.11.24 |
---|---|
C++ 포인터에 대해 이해하기 (1) | 2023.11.24 |
C++ 기본생성자(default constructor) 와 생성자 오버로딩 (0) | 2022.11.20 |
C++ RAII style mutex lock 사용하기 (2) | 2022.11.14 |
C++ 템플릿이란? Template은 generic을 위함 (0) | 2022.10.17 |