Zu deiner ersten Frage:
Mit *y machst du den vorherigen Schritt wieder rückgängig, denn y speichert ja schon die Adresse von x, y ist schon ein Pointer.
Wenn du also *y machst ist das also das selbe wie *(&x) und das ergibt nunmal x.
Deine zweite Frage:
y ist der Pointer auf x. Damit ist v = y + 5 der Pointer auf den Wert 5 Adressen weiter. Da dieser Wert aber in deinem Code nicht verwendet wird, steht da irgendwas drin. Das ist eben ein zufälliger Speicherbereich. mit *v bekommst du dann den Wert der dort drin steht.
Punkte: 160