C뉴비입니다 함수 포인터 쓰는 법 좀 알려주세요

조회수 1320회

포인터는 왜 이렇게 어려운 걸까요 그냥 포인터도 어려운데 함수 포인터라니 인자는 어떻게 넘기는 걸까요..

너무 어려운 기능 말고 간단하게 쓰는 방법으로 알려주세요 ㅜㅜ

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    C의 함수 포인터

    1. 함수 정의하기

    함수 포인터를 쓰려면 함수가 있어야 하니 함수부터 만들겠습니다. 저는 간단하게 정수형 인자 2개를 받아 둘의 합을 return하는 함수를 만들었습니다.

    int addInt(int n, int m) {
        return n+m;
    }
    

    2. 함수 포인터 정의하기

    그리고 함수 포인터를 정의합니다. addInt는 인자를 2개 받으니 이 포인터도 함수를 2개 받아야 하고, int를 return하니 int형이어야 합니다.

    int (*functionPtr)(int,int);
    

    이제 마지막으로 이 포인터가 addInt를 가리키게 합니다.

    functionPtr = &addInt;
    

    3. 2의 함수 포인터 사용하기

    그럼 이제 이 함수 포인터를 써봅시다. 저는 2와 3을 더해서 5를 return받았습니다.

    int sum = (*functionPtr)(2, 3); // sum == 5
    

    다른 함수에 포인터를 넘길 때도 크게 다르지 않습니다

    int add2to3(int (*functionPtr)(int, int)) {
        return (*functionPtr)(2, 3);
    }
    

    또 함수 포인터를 return하는 함수를 만들 수도 있습니다

    int (*functionFactory(int n))(int, int) {
        printf("Got parameter %d\n", n);
        int (*functionPtr)(int,int) = &addInt;
        return functionPtr;
    }
    
    
    int main(){
        int (*myfptr)(int,int) = functionFactory(6);
        printf("%d", (*myfptr)(2,3));
    }
    

    4. typedef로 함수포인터 이름 새로 만들기

    코드가 더러워 보인다면 typedef를 써서 함수 포인터를 다른 이름으로 정의할 수 있습니다

    typedef int (*myFuncDef)(int, int);
    
    myFuncDef functionFactory(int n){
        printf("Got parameter %d\n", n);
        myFuncDef functionPtr = &addInt;
        return functionPtr;
    }
    
    
    int main(){
        myFuncDef myfptr = functionFactory(6);
        printf("%d", (*myfptr)(2,3));
    }
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.