"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment les pointeurs affectent-ils la modification de la valeur dans les fonctions Go ?

Comment les pointeurs affectent-ils la modification de la valeur dans les fonctions Go ?

Publié le 2024-11-07
Parcourir:109

How do pointers affect value modification in Go functions?

Comprendre la modification de valeur avec des pointeurs dans Go

Dans Go, les pointeurs permettent un accès indirect et une modification des valeurs. Cependant, comprendre le fonctionnement des pointeurs est crucial lors de leur transmission à des fonctions.

Lors du passage d'un pointeur vers une fonction, deux scénarios se présentent : modification de valeur ou réaffectation de pointeur.

Scénario 1 : Modification de la valeur

Considérez ce code :

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}

Ici, la fonction f reçoit un pointeur vers la structure Test. À l'intérieur de f, le pointeur déréférencé (*p) se voit attribuer une nouvelle structure Test avec une valeur de 4. Cela modifie effectivement la structure i d'origine dans la fonction principale, et la sortie est 4.

Scénario 2 : Réaffectation du pointeur

Maintenant, modifions légèrement le code :

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &Test{4}
}

Dans ce cas, au lieu de modifier la valeur pointée, la fonction réaffecte le pointeur p à une nouvelle structure Test avec une valeur de 4. Puisque p est une variable locale dans f, ce changement n'affecte pas la original i struct dans la fonction principale, et la sortie reste 2.

Solution : Modification de la valeur pointée

Pour modifier la valeur pointée, nous devons déréférencer le pointeur et directement accéder au membre de la structure :

type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}

En utilisant p.Value, nous modifions le champ Value de la structure d'origine, ce qui donne une sortie de 4.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3