¡Buenas xiruko!
La verdad es que a ese codigo no le veo mucho sentido....no termino de entender que es lo que se pretende....pero echate un vistazo a este enlace que tiene ejemplos de punteros a funciones:
http://copstone.com/2010/01/punteros-a-funciones/De todas formas si te da un Segment Fault (fallo de segmentacion) esto se debe a tu programa esta intentado a acceder a posiciones de memoria no permitidas. Y probablemente el fallo este en estas 2 lineas:
pfn=&codigo[0];
printf("Valor inicial: %d\n", pfn
());
Al puntero pfn le estas asginado el puntero que apunta a codigo[0] (y esta posicion no esta apuntando a ninguna funcion probablemente). Por eso cuando haces el printf() y se va a ejecutar la funcion, lo que hace el programa es irse a la posicion que le has asignado al puntero (que vete a saber cual es) y resulta que alli no hay ninguna funcion y encima puede que estes accediendo a una posicion fuera del mapa de memoria asignado a tu programa.....
De hecho al compilarlo me ha dado un warning...(yo en mi caso he metido el main y la funcion en el mismo fichero...)
####@%%%%:/home/%%%%%/Escritorio# gcc -Wall prueba.c -o prueba
prueba.c: In function ‘main’:
prueba.c:13:5: warning: assignment from incompatible pointer type [enabled by default]
Creo que ese codigo no esta bien....
Un saludo.