ваш пример не имеет особого смысла, но
void foo()
{
printf("foo\n");
}
void bar()
{
printf("bar\n");
}
void goo()
{
printf("goo\n");
}
int main()
{
uint64_t Var1 = (uint64_t)foo, Var2 = (uint64_t)bar, Var3 = (uint64_t)goo;
void (*pfunc[3])();
pfunc[0] = (void (*)())Var1;
pfunc[1] = (void (*)())Var2;
pfunc[2] = (void (*)())Var3;
pfunc[0]();
pfunc[1]();
pfunc[2]();
}
Var1
, Var2
, Var3
сохраняют адреса функций.
void (*pfunc[3])();
- объявляет массив из трех указателей на функции
pfunc[2]();
- разыменовывает указатель на функцию - ie вызывает указанную функцию
https://godbolt.org/z/VUpfLl
PS uint64_t был использован, потому что целое число должно иметь размер, по крайней мере, такой же, как размер указателя. Моя система 64-битная, поэтому указатели 64-битные.