The following excerpt is from Harbinson, Steele C: A Reference Manual (5th Edition). According to the book the two assignments to
int a, *p;
p = a; p = *&a;
p = *&a
p = *&a
C11, chapter §188.8.131.52, Address and indirection operators,
*operator denotes indirection. [....] If the operand has type ‘‘pointer to type’’, the result has type ‘‘type’’. [....]
p = *&a;,
&ais a pointer to "array of
*&ais an array type.
Now, when used in RHS of assignment, an array type decays to pointer to the first element of the array, an
C11, chapter §184.108.40.206
Except when it is the operand of the sizeof operator, the
_Alignofoperator, or the unary
&operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. [...]
Hence, there's no warning/ error reported.