The most useful things I've seen pointers to functions for have been:
1) In the game Wolfenstein3D, the guard AI is defined by a struct:
Code: typedef struct statestruct
{
boolean rotate;
short shapenum; // a shapenum of -1 means get from ob->temp1
short tictime;
void (*think) (void *),(*action) (void *);
struct statestruct *next;
} statetype
You can see the void (*think)(void *), which is a function that defines the guard's movement AI, and action is how it shoots. This is very handy for FSMs that define behavior. Just pass in the function that it should call and you're good to go. Of course, in true OOP you can just override the base think and action methods; but it's good in C or ASM.
2) When writing a MIPS interpreter in MIPS, we had an array of functions (well, labels) that were indexed by opcode, so we could just branch opArr[opcode], basically
Code: jumptable: .word ALU,blank,Jump,blank,BranchEqual,BranchNotEqual,blank,blank,AddImmediate,blank,blank,blank,blank
.word OrImmediate,blank,Lui,blank,blank,blank,blank,blank,blank,blank,blank,blank,blank
.word blank,blank,Mul,blank,blank,blank,LoadByte,blank,blank,LoadWord,LoadByteUnsigned,blank,blank,blank
.word blank,blank,blank,StoreWord,blank,blank,blank,blank,blank,blank,blank,blank,blank,blank
.word blank,blank,blank,blank,blank,blank,blank,blank,blank,blank
sysJumpTable:
.word blank, printIntChar, blank, blank, printString, readInt, blank, blank, readString, blank
.word Terminate, printIntChar, readChar, blank, blank, blank, blank, blank
So, while not being exactly pointers to functions, it's the same concept. Jumptables are awesome.