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 IA
Réponse de l'IA
Dans ce code, il y a deux fonctions qui acceptent un pointeur vers un int, mais qui fonctionnent différemment :
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Affichera 10
updateV2(&x)
fmt.Println(x) // Affichera 20
}
Explication :
- Dans
updateV1, le paramètrepxest une copie locale du pointeur. L'affectationpx = &x2ne modifie que cette copie locale, sans affecter la variablexdansmain. - Dans
updateV2, on dereference le pointeur*px = 20, c'est-à-dire qu'on modifie la valeur à l'adresse pointée parpx. Cela modifie la valeur dexdansmain.
Résultat : updateV1 ne modifie pas la variable d'origine, alors que updateV2 le fait.
Cela montre la différence entre modifier une copie locale du pointeur et modifier la valeur à l'adresse pointée.