Yes.
From the spec:
For an operand x of pointer type *T, the pointer indirection *x denotes the variable of type T pointed to by x.
Emphasis mine. "The variable", means it really denotes the storage location that `x` points to. Not the value or anything like that. Further, then:
For an operand x of type T, the address operation &x generates a pointer of type *T to x. The operand must be addressable, that is, either a variable, pointer indirection, or slice indexing operation; or a field selector of an addressable struct operand; or an array indexing operation of an addressable array. As an exception to the addressability requirement, x may also be a (possibly parenthesized) composite literal.
Emphasis mine, again. This tells you that the behavior of `&` with composite literals to allocate a new variable is an exception - in general, `&` just gives you the address of whatever expression you apply it to. In this case, specifically, a pointer-indirection denoting, as we've seen above, the variable that x points to.
So, it is completely expected that `&(*p) == p`.