함수포인터

2019. 11. 13. 23:49PL/C++

함수포인터는 함수의 주소를 담는 변수로 다음과 같이 쓰인다

 

#include <stdio.h>

void func(int a) {
    printf("value of a is %d\n", a);
}

int main(void) {
    void (*p)(int);
    p = func;
    p(3);

    void (*q)(int) = &func;
    (*q)(4);
    return 0;
}

 

q를 선언해서 사용할 때 &를 지워서 사용할 수 있다. 함수의 이름은 즉 함수의 주소를 가리키기도 한다

#include <stdio.h>

void func(int a) {
    printf("value of a is %d\n", a);
}

int main(void) {
    void (*p)(int);
    p = func;
    p(3);

    void (*q)(int) = func;
    q(4);
    return 0;
}

 

함수 포인터 배열을 만들어서 사용할 수 있다. (*p[])로 선언할 수 있다

#include <stdio.h>

void add(int a, int b) {
    printf("add %d+%d=%d\n", a, b, a+b);
}

void sub(int a, int b) {
    printf("sub %d-%d=%d\n", a, b, a-b);
}

void mult(int a, int b) {
    printf("mult %d*%d=%d\n", a, b, a*b);
}

int main(void) {
    void (*op[])(int, int) = { add, sub, mult };
    
    int a = 15, b = 10;
    printf("choose op add 0, sub 1, mult 2\n");
    
    int opt;
    scanf("%d", &opt);
    
    (op[opt])(a, b);  
    
    return 0;
}