I cant see any dynamic here.
The pointer-array (Superku's example) is a static array, not dynamic.
And entities are static in memory once created.
Just remember to fill your array with NULLs at startup time.
eg
#define MAX_BULLET 10
ENTITY* BULLET[MAX_BULLET];
void BULLET_startup()
{ int i; for(i=0; i<MAX_BULLET; i++) BULLET[i] = NULL; }