Need I specify the address of the char array opcodes (&opcodes)? I'm casting to a void pointer, then I see indeed specify again the address (fp points address to opcodes -> points to opcodes).
char opcodes[] = "\x41\x41...";
void main()
{
void(*fp) (void);
fp = (void *)&opcodes; // opcodes or &opcodes
fp();
}