Sobes.tech
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 updateV1 ist der Parameter px eine lokale Kopie des Zeigers. Die Zuweisung px = &x2 ändert nur diese lokale Kopie, beeinflusst nicht die Variable x in main.
  • Bei updateV2 wird der Zeiger dereferenziert *px = 20, also wird der Wert an der Adresse, auf die px zeigt, geändert. Das ändert den Wert von x in main.

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.