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


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

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

  • 2016년 01월 29일에 작성됨

조회수 214


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));
}
  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close