Polymorphic pointers-to-functions whose parameters are void pointers as arguments in C
This doesn't really answer your question, but when using function pointers it is usually easier to use a typedef:

typedef void (*Action) (void * const);
static Action action[] = { (Action) number, (Action) letter };


Also the calling of the action would be better expressed as 

struct Thing {
    Action action;
    void *data;
};
...
const struct Thing things[] = {
    { (Action) letter, (void *)&amp;aah },
    { (Action) number, (void *)&amp;five },
    { (Action) number, (void *)&amp;six }
};
for(t = things; t &lt; things + things_size; t++) {
    t-&gt;action(t-&gt;data);
}