&var_name[0] can be replaced by
var_name
type *ptr, then
*ptr+1 means (*ptr)+1
and doesn't imply pointer arithmetic; but
*ptr++ means *(ptr++) and
does imply pointer arithmetic (i.e.,
increment by sizeof(type))
ptr->member is the same
as (*ptr).member