an enum-type is used to "translate" words into numbers.
An example.
You have an array that stores your grades like:
int Grade[4];
Now, you need to assign the grades of your subjects (like math, english, biology, chemistry, history) to your array.
So, in math you have an grade of 1
Grade[0] = 1; // math --> 1
for english you have recieved a grade of 3
Grade[1] = 3; // english --> 3
Later in your code, you want to retrieve the grade of english. For that you will have to remember that in your Grade[] array,the second entry [1] would be english.
With enum you could do it easier.
enum subject{math, english, biology, chemistry, history};
the compiler will do the following.
Every expression in the brackets will get an index-number starting with 0.
So you get
math = 0
english=1
chemistry =2 a.s.o.
Now,what good does that do?
The expression Grade[0] is the same as Grade[math]
You do not need to know which subject has which index any more, you simply call them by their name.
This means that instead of a figure you can really NAME the index you need. It makes your code easier to read and to debug.
But note: you can have as many enum as you like, but you can never have a name stored in all those enums more then once!
Another way of thinking of it is is a fixed/limited list of options that a variable of that type can be set to. A standard int variable can be any valid integer between it's system min and max possibilities. If you defined an enum as