По идее строка
f[1]() - есть вызов функции, зачем что то еще преобразовывать?
В ИАРЕ, например, работают вот такие конструкции:
Код
void f1(void)
{
}
void f2(void)
{
}
void f3(void)
{
}
__flash void (*ff[])(void)={f1,f2};
__eeprom void (*ef[])(void)={f1,f2};
/*sram*/ void (*sf[])(void)={f1,f2};
void main(void)
{
ff[0]();
ef[1]();
sf[2]();
...
}