Basically, a reference is an alias to an existing variable. This means, if you apply any operation on a reference, it will behave as if you were using the original variable name. This principle also applies to taking the address of it - and as a result, if you take the address of a reference, you will
not get a pointer to the reference variable, as you might think, instead you get a pointer to the address that holds the variables value:
int original = 5;
int& alias = original;
int* p_original = &original;
int* p_alias = &alias;
(int&)* pr_alias = &alias;
If you wanted to create an array of references, the array symbol itself would be considered a pointer to an array element. Since taking the address of a reference yields a pointer to the original element, the type of the pointer will be pointer to original element type, not pointer to reference of (...). Therefore using a reference as an element type for an array is considered illegal.
( I have to admit I'm not entirely happy with that last part, but I've never come across a better explanation )