Code
c
#include <stdio.h>
// A function pointer type
typedef int (*BinOp)(int, int);
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }
int apply(BinOp op, int a, int b) {
return op(a, b);
}
int main(void) {
BinOp op = add;
printf("add(2,3) = %d\n", op(2, 3));
op = mul;
printf("mul(2,3) = %d\n", op(2, 3));
// Dispatch table
BinOp table[] = {add, mul};
for (int i = 0; i < 2; i++) {
printf("table[%d](4,5) = %d\n", i, table[i](4, 5));
}
return 0;
}