Senior
func updateV1(px *int) { x2 := 20 px = &x2 } func updateV2(px *int) { *px = 20 } func main() { x := 10 updateV1(&x) fmt.Println(x) updateV2(&x) fmt.Println(x) }
sobes.tech KI
Antwort von AI
In diesem Code gibt es zwei Funktionen, die einen Zeiger auf einen int akzeptieren, aber unterschiedlich arbeiten:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Gibt 10 aus
updateV2(&x)
fmt.Println(x) // Gibt 20 aus
}
Erklärung:
- Bei
updateV1ist der Parameterpxeine lokale Kopie des Zeigers. Die Zuweisungpx = &x2ändert nur diese lokale Kopie, beeinflusst nicht die Variablexinmain. - Bei
updateV2wird der Zeiger dereferenziert*px = 20, also wird der Wert an der Adresse, auf diepxzeigt, geändert. Das ändert den Wert vonxinmain.
Ergebnis: updateV1 ändert die ursprüngliche Variable nicht, updateV2 tut es.
Dies zeigt den Unterschied zwischen der Änderung einer lokalen Kopie des Zeigers und der Änderung des Werts an der Adresse, auf die gezeigt wird.