I think it helps to read '&' as "address of" or "pointer to" in C.
Therefore
&sin would be read "the address of sin"
and
(struct sockaddr *)&sin would be read "the address of sin cast as a pointer to a sockaddr structure"