I agree with @NoXzema - std::function is what you want.
However, if you insist on using normal function pointers (because you are actually using C), I suggest a typedef: i.e. say you have a function pointer: typedefvoid (*DrawFuncPtr)(void*, SDL_Surface*);
Then you can declare your function pointers like this: DrawFuncPtr drawFunc;
And hence dynamically allocate the arrays like this: DrawFuncPtr* funcs = (DrawFuncPtr*)malloc(sizeof(DrawFuncPtr) * arraySize);
Of course, only do this if you are programming in C (which you appear to be). If you are programming in C++, then use new instead of malloc, find an alternative for passing void pointers, and use std::function.