You mean to say address of a[0] and a are stored at the same location.
Also what should &a+2 yield??
If you meant a[0] and a are stored at the same location then yes.
If you meant address of a[0] and address of a are the same then yes.
But if you meant (address of a[0]) and a are stored at the same location then no. (address of a[0]) has no location in memory since it is not an object.
&a+2
&a has type int(*)[10], a pointer to an array of 10 integers.
Assuming that integer has size 4 (which is very common now) then this is basic pointer arithmetic, the result is the original pointer plus 2 times the size of the object pointed to. Since the object pointed to is an array of 10 integers its size is 10 * sizeof(int) or 40 under our assumptions. so the expression
&a+2
is equivalent to
(char*)(&a) + (40 * 2)
in words
Base address of a + (size of array * increment)
The result is the address 80 bytes further along in memory.