Starting at the left hand side:
struct foo *ptr
declares ptr to be of type struct foo *, that is a pointer to struct foo.
The = initializes that ptr variable to whatever the right hand side evaluates as.
And the right hand side
(struct foo *) p2
is an expression that casts p2 to be of type struct foo *.
1
solved Struct name *ptr = (Same struct name *) p2; [closed]