타이핑의 기억

함수포인터의 이해

unier 2011. 11. 11. 13:39

1. 기본형

#include <stdio.h>

int add(int a, int b){ return a+b; }
int sub(int a, int b){ return a-b; }
int mul(int a, int b){ return a*b; }

int (*pa[3])() = {add, sub, mul};

int compute(int op, int a, int b)
{
     return pa[op](a, b);
}

void main(void)
{
     printf("%d\n", compute(0,3,4));
     printf("%d\n", compute(1,3,4));
     printf("%d\n", compute(2,3,4));
}

2. 확장형

#include <stdio.h>

int add(int a, int b){ return a+b; }
int sub(int a, int b){ return a-b; }
int mul(int a, int b){ return a*b; }
int sqr(int a){ return a*a; }

int (*pa[4])( ) = {add, sub, mul, sqr};

int (*compute(int op))()
{
     return pa[op];
}

void main(void)
{
     printf("%d\n", compute(0)(3,4));
     printf("%d\n", compute(1)(3,4));
     printf("%d\n", compute(2)(3,4));
     printf("%d\n", compute(3)(3));
}