Hola, vamos a ver algo muy loco, algo que nose si en otros lenguajes se pueda, pero en C obiamente SI 
hace un tiempo descubri q se podia hacer esto y me quede
:
:
xDDD
/**********************************************************/
/**********************************************************/
#include "stdio.h"
typedef int (*_func)(char *, ...);
_func func[10];
int main(void)
{
func[5] = (_func)printf;
func[5]("hola mundo!\n");
getchar();
return 0;
}
utilize func[5] solo para demostrar que estoy trabajando con el array

no puse getchar dentro del array porque getchar esta declarado diferente que printf...
veamos una utilidad buena para esto del array de funciones:
/**********************************************************/
#include "stdio.h"
typedef float (*_func)(float, float);
float add(float a, float b)
{
return a + b;
}
float sub(float a, float b)
{
return a - b;
}
float mul(float a, float b)
{
return a * b;
}
float div(float a, float b)
{
if(b == 0)
return 0;
return a / b;
}
/*cargamos nuestro vector de funciones...*/
_func func[4] = {add, sub, mul, div};
int main(void)
{
int num = 0;
float a,b;
printf("Ingrese 2 numeros\n");
scanf("%f %f", &a, &b);
while(num > 4 || num < 1){
printf("1 - Sumar\n2 - Restar\n3 - Multiplicar\n4 - Dividir\n");
scanf("%d", &num); /*gracias Anibal xD*/
}
num--;
/*por el metodo "tradicional" tendria que venir un switch o varios ifs...*/
printf("Resultado: %f\n", func[num](a, b));
while(getchar() != '\n'); /*la forma que utiliza Ramc para vaciar el buffer xD*/
getchar();
}
/**********************************************************/
bueno, eso es todo, creo q es facil de entender
salu2!
P.D: pufff hace cuanto q no posteaba en C!!





