Notice
Recent Posts
Recent Comments
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 10-4 추가 내용 (함수 포인터) - 미해결 본문

Programming Lang/C++

C++ Chapter 10-4 추가 내용 (함수 포인터) - 미해결

시데브 2023. 7. 25. 16:40

함수 포인터 

  • 포인터 변수가 변수가 저장된 메모리의 주소를 가리키듯이, 함수 포인터 변수는 함수가 저장된 주소를 가리킨다.
  • 함수 포인터 선언 방식은 다음과 같다.
void (*FuncPtr)(int n)	//함수의 반환형 (*함수 포인터 이름)(매개변수)

 

  • 함수 포인터 변수의 초기화에는 다음과 같이 &연산자를 사용하지 않은 함수를 그대로 이용한다.
#include <iostream>
using namespace std;

void MyFunc(int n)  //함수 포인터와 반환형, 매개변수 타입 맞춰야 함
{
    cout<<"함수에 저장된 숫자는 "<<n<<"!!"<<endl;
}

int main(void)
{
    cout<<MyFunc<<endl;
    void (*Fptr)(int n); 
    Fptr = MyFunc;   //C++에서는 함수를 함수 포인터로 암묵적으로 변환 -> 주소 연산자 &를 사용할 필요 X
    cout<<&Fptr<<endl;

    Fptr(3);

    return 0;
}
1
0x61fe18
함수에 저장된 숫자는 3!!

 원래대로라면 c++ 컴파일러에서는 함수를 출력했을 때 함수의 주소가 나온다고 한다. 그러나, 필자의 로컬 컴퓨터에서 돌릴 때는 계속해서 1이라는 값이 나와 웹 환경에서도 실행을 해봤지만 1이 나온다. 실제로 다른 사람들은 정상적으로 주소가 출력되는 코드를 그대로 복사해서 실행해도 1이 출력된다. 그렇기에 해당 문제를 필자의 로컬 컴퓨터 문제라고 생각하고 내용을 진행하겠다.

 

 

매개변수로 이용되는 함수 포인터

  • 함수 포인터도 포인터 변수와 마찬가지로 매개변수로 이용할 수 있다.
#include <iostream>
using namespace std;

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

void print_odd(int a, int b, int (*fPtr)(int, int))
{
    int ret = fPtr(a, b);

    if(ret % 2 == 1)
        cout<<ret<<endl;
    else
        cout<<"홀수가 아님"<<endl;
}

int main(void)
{
    print_odd(1, 3, add);
    print_odd(1, 4, add);

    return 0;
}
홀수가 아님
5

 

클래스 멤버함수의 함수 포인터

  • 멤버함수의 포인터를 선언할 때는 연산자 &를 생략할 수 없다.
#include <iostream>
using namespace std;

class Test
{
public:
    int add(int n1, int n2)
    {
        return n1+n2;
    }
};

int main(void)
{
    Test test;
    int (Test::*fPtr)(int, int) = &Test::add;
    cout<<(test.*fPtr)(1,2)<<endl;
}
3

 


참고자료

 

C++ 08.09 - 함수 포인터 (function pointer)

함수 포인터 (function pointer) 포인터가 다른 변수의 주소를 저장하는 변수라는 것을 배웠다. 이와 유사하게 함수 포인터(function pointer)는 함수를 가리키는 변수다. 즉, 함수의 주소를 저장하는 변수

boycoding.tistory.com

 

[ c++ ] 함수포인터, 멤버 함수포인터

함수포인터, 객체의 함수포인터

velog.io

 

[C++ 기본 공부정리] 11-4. 함수 포인터(function pointer)

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. 1. 함수 포인터란? 어떤 데이터가 생성되면 메모리에 공간을 할당받아 저장되고

min-zero.tistory.com