#include <iostream>

void f1() { std::cout << "do f1\n"; }
void f2() { std::cout << "do f2\n"; }
void f3() { std::cout << "do f3\n"; }

using func_t = void (*)();
using func_p = func_t*;

int main()
{
    const int amountOfFunctions = 3;

    std::cout << "static\n";
    //void (*functions_1[amountOfFunctions])() = { f1, f2, f3 };
    func_t functions_1[] = { f1, f2, f3 };
    for (size_t i = 0; i < amountOfFunctions; ++i) {
        functions_1[i]();
    }

    std::cout << "\ndynamic\n";
    //func_t* functions_2 = new func_t[amountOfFunctions]{f1, f2, f3};
    void(**functions_2)() = new (void(*[amountOfFunctions])()){ f1, f2, f3 };
    for (size_t i = 0; i < amountOfFunctions; ++i) {
        functions_2[i]();
    }
    delete[] functions_2;

    std::cout << "\n\n   press [Enter]...";
    std::cin.get();
}
