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 parametropxè una copia locale del puntatore. L'assegnazionepx = &x2modifica solo questa copia locale, senza influenzare la variabilexinmain. - In
updateV2, si dereferenzia il puntatore*px = 20, cioè si modifica il valore all'indirizzo a cui puntapx. Questo cambia il valore dixinmain.
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.