함수 인자로 함수를 넘겨 줄 수 있습니다. (정확히는 함수의 시작주소를 넘겨줌)
http://codepad.org/yawaDRbI
void fooA(void){ printf("함수 A\n"); }
void fooB(void){ printf("함수 B\n"); }
void fooC(void){ printf("함수 C\n"); }
void foo(void (*fp)(void)){ fp(); }
int main(void)
{
foo(fooA);
foo(fooB);
foo(fooC);
return 0;
}
유의해야 할 점은 리턴타입 / 매개변수 타입을 맞춰주어야 한다는 것이빈다.
이런식으로 사용이 가능하다는 얘기죠.
http://codepad.org/DCWCESFP
int plus(int a,int b){ return a+b; }
int minus(int a,int b){ return a-b; }
int foo(int a,int b,int (*fp)(int,int)){ return fp(a,b); }
int main(void)
{
printf("%d\n",foo(15, 10, plus));
printf("%d\n",foo(15, 10, minus));
return 0;
}
물론 함수포인터도 배열로 생성 가능하니, 배열 인덱스에 따라서 switch 그딴거 없이 상황에 맞게 호출 할 수도 있습니다.
http://codepad.org/EAqooPCT
int plus(int a,int b){ return a+b; }
int minus(int a,int b){ return a-b; }
int foo(int a,int b,int (*fp)(int,int)){ return fp(a,b); }
int main(void)
{
int i;
int (*fp[2])(int,int)={plus,minus};
// fp[0]=plus; fp[1]=minus;
for(i=0;i<2;i++)
printf("%d\n",foo(15, 10, fp[i]));
return 0;
}
아니면 일정 상황이 되었을때 해당 함수를 호출해 주는 형태로도 가능합니다.
http://codepad.org/LG9H0NDU
static int (*g_fp)(int,int);
int plus(int a,int b){ return a+b; }
int minus(int a,int b){ return a-b; }
void SetFp(int (*fp)(int,int)){ g_fp=fp; }
int foo(int a,int b){ return g_fp(a,b); }
int main(void)
{
SetFp(plus);
printf("%d\n",foo(15, 10));
SetFp(minus);
printf("%d\n",foo(15, 10));
return 0;
}
출처 - 유리한
http://codepad.org/yawaDRbI
void fooA(void){ printf("함수 A\n"); }
void fooB(void){ printf("함수 B\n"); }
void fooC(void){ printf("함수 C\n"); }
void foo(void (*fp)(void)){ fp(); }
int main(void)
{
foo(fooA);
foo(fooB);
foo(fooC);
return 0;
}
유의해야 할 점은 리턴타입 / 매개변수 타입을 맞춰주어야 한다는 것이빈다.
이런식으로 사용이 가능하다는 얘기죠.
http://codepad.org/DCWCESFP
int plus(int a,int b){ return a+b; }
int minus(int a,int b){ return a-b; }
int foo(int a,int b,int (*fp)(int,int)){ return fp(a,b); }
int main(void)
{
printf("%d\n",foo(15, 10, plus));
printf("%d\n",foo(15, 10, minus));
return 0;
}
물론 함수포인터도 배열로 생성 가능하니, 배열 인덱스에 따라서 switch 그딴거 없이 상황에 맞게 호출 할 수도 있습니다.
http://codepad.org/EAqooPCT
int plus(int a,int b){ return a+b; }
int minus(int a,int b){ return a-b; }
int foo(int a,int b,int (*fp)(int,int)){ return fp(a,b); }
int main(void)
{
int i;
int (*fp[2])(int,int)={plus,minus};
// fp[0]=plus; fp[1]=minus;
for(i=0;i<2;i++)
printf("%d\n",foo(15, 10, fp[i]));
return 0;
}
아니면 일정 상황이 되었을때 해당 함수를 호출해 주는 형태로도 가능합니다.
http://codepad.org/LG9H0NDU
static int (*g_fp)(int,int);
int plus(int a,int b){ return a+b; }
int minus(int a,int b){ return a-b; }
void SetFp(int (*fp)(int,int)){ g_fp=fp; }
int foo(int a,int b){ return g_fp(a,b); }
int main(void)
{
SetFp(plus);
printf("%d\n",foo(15, 10));
SetFp(minus);
printf("%d\n",foo(15, 10));
return 0;
}
출처 - 유리한