You can use an enum type as you would use any other type: You can create arrays thereof, allocated it dynamically using operator new, define pointers to it and return it from a function:
enum Dir { Up, Down, Right, Left }; Dir get_dir(); // use enum in a function's return type int main() { Dir *p=new Dir(Up); // allocate and initialize enum Dir dir[3]={Up, Up, Up}; // create and initialize array dir[0]=get_dir(); delete p; }