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 AI

Risposta dell'AI

In questo codice ci sono due funzioni che accettano un puntatore a int, ma funzionano in modo diverso:

func updateV1(px *int) {
    x2 := 20
    px = &x2
}

func updateV2(px *int) {
    *px = 20
}

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // Stampa 10
    updateV2(&x)
    fmt.Println(x) // Stampa 20
}

Spiegazione:

  • In updateV1, il parametro px è una copia locale del puntatore. L'assegnazione px = &x2 modifica solo questa copia locale, senza influenzare la variabile x in main.
  • In updateV2, si dereferenzia il puntatore *px = 20, cioè si modifica il valore all'indirizzo a cui punta px. Questo cambia il valore di x in main.

Risultato: updateV1 non modifica la variabile originale, mentre updateV2 sì.

Questo dimostra la differenza tra modificare una copia locale del puntatore e modificare il valore all'indirizzo a cui si punta.