Array elements are always stored one right after another in memory with no gaps. This makes it easy to calculate the address of the 100-th element or the 1000-th element in an array by just knowing the address of the first element and the size of each element.
Consider the following:
The name of the array here is a.
a[3] is just one element in the array and is of type int. This int begins at address 4012 and the int value at that location is 4.
But a (without the subscript) should mean the whole array.
Important note: In C++ the whole array is identified by knowing the address of the first int; that is, by the address of the first element. If the array name, a is used in an assignment or other expression, its value is calculated by converting it to address of the first element - a pointer value.
int a[5]; int *p; p = a;
The right side of the assignment a is converted to a pointer value (the address of a[0]) and assigned to p.