#include <stdio.h>
typedef void (*FunPtr)(int a, float b);
void foo(int a, float b) {
printf("FOO : %d %f\n", a
, b
); }
void bar(int a, float b) {
printf("BAR : %d %f\n", a
, b
); }
void assign(int n, FunPtr *ptr) {
if (n == 0) {
*ptr = foo;
} else {
*ptr = bar;
}
}
int main(void) {
FunPtr f;
assign(0, &f);
f(10, 20.5);
assign(1, &f);
f(10, 20.5);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHZvaWQgKCpGdW5QdHIpKGludCBhLCBmbG9hdCBiKTsKCnZvaWQgZm9vKGludCBhLCBmbG9hdCBiKSB7CglwcmludGYoIkZPTyA6ICVkICVmXG4iLCBhLCBiKTsKfQoKdm9pZCBiYXIoaW50IGEsIGZsb2F0IGIpIHsKCXByaW50ZigiQkFSIDogJWQgJWZcbiIsIGEsIGIpOwp9Cgp2b2lkIGFzc2lnbihpbnQgbiwgRnVuUHRyICpwdHIpIHsKICAgIGlmIChuID09IDApIHsKICAgIAkqcHRyID0gZm9vOwogICAgfSBlbHNlIHsKICAgIAkqcHRyID0gYmFyOwogICAgfQp9CgppbnQgbWFpbih2b2lkKSB7CglGdW5QdHIgZjsKCWFzc2lnbigwLCAmZik7CglmKDEwLCAyMC41KTsKCWFzc2lnbigxLCAmZik7CglmKDEwLCAyMC41KTsKCXJldHVybiAwOwp9