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 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ètre px est une copie locale du pointeur. L'affectation px = &x2 ne modifie que cette copie locale, sans affecter la variable x dans main.
  • Dans updateV2, on dereference le pointeur *px = 20, c'est-à-dire qu'on modifie la valeur à l'adresse pointée par px. Cela modifie la valeur de x dans main.

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.