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;
}