In Mathematica, everything is an expression. So, the expression fun1
is effectively the "function pointer" that you want. It's an expression with down values that specify how to evaluate when applied to arguments. Let's make this concrete:
fun1[x_Integer] := ToString[StringForm["fun1 accepts `` and doubles: ``", x, 2 x]];
fun2[x_Integer] := ToString[StringForm["fun2 accepts `` and squares: ``", x, x^2]];
fun3[x_Integer] := ToString[StringForm["fun3 accepts `` and factors: ``", x, FactorInteger[x]]];
Let's simulate the user's choice with a random choice:
chosenFunc = RandomChoice[{fun1, fun2, fun3}];
Now let's use our choice:
chosenFunc[18]
(* "fun2 accepts 18 and squares: 324" *)