Comprendre la modification de valeurs 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 :
<code class="go">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} }</code>
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 :
<code class="go">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} }</code>
Dans ce cas, au lieu de modifier la valeur pointée, la fonction réaffecte le pointeur p à un nouveau Testez la structure avec une valeur de 4. Puisque p est une variable locale dans f, ce changement n'affecte pas la structure i d'origine dans la fonction principale et la sortie reste 2.
Solution : modification de la structure pointue. Value
Pour modifier la valeur pointée, nous devons déréférencer le pointeur et accéder directement au membre de la struct :
<code class="go">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 }</code>
En utilisant p.Value, nous modifions le champ Value de la struct d'origine , ce qui donne une sortie de 4.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!