This is a techique often used to define an array that is in some way related to the values in an enum. For a simple example:
enum {
ZERO,
ONE,
TWO,
THREE,
MAX_VALUE //has value of 4
};
because the natural value of an enumerated element starts at zero, and increments by one for each member, the final value will always be useful to initialize an array, of any type (strings, ints, floats, etc) for a number of elements equal to that final value. eg.
int numbers[MAX_VALUE];//an array with 4 elements
int i;
You can then use MAX_VALUE to guarantee treating the array in a loop without going beyond the bounds of the array, eg. something like:
for(i=0;i<MAX_VALUE;i++)//will loop 4 times
{
numbers[i]=i;//assigned a value equal to its namesake, for i < MAX_VALUE
}
Given this explanation, the enum in your original post is simply being initialized with a value of 2:
U_08 pPlaneCopy[D_ROM_RDE_MAX_GROUPS];
is the same as
U_08 pPlaneCopy[2];