Modification des valeurs via des pointeurs dans Go
Dans Go, passer des pointeurs vers des fonctions permet une manipulation directe des valeurs pointées. Cependant, il y a certaines nuances à prendre en compte lors de l'attribution de valeurs aux pointeurs.
Attribution de pointeurs sans modification de valeur
Considérez le code suivant :
<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) { // Assigning a new pointer value p = &Test{4} }</code>
Dans ce code, p est un pointeur vers la structure i. Dans la fonction f, l'attribution d'une nouvelle valeur de pointeur à p ne modifie pas la valeur de i. En effet, p est une variable locale dans f et changer sa valeur n'affecte que la copie locale.
Modifier les valeurs pointues
Pour modifier réellement la valeur de i, vous besoin de changer la valeur de la structure pointée. Cela peut être fait via l'opérateur de déréférencement (*). Par exemple :
<code class="go">func f(p *Test) { p.Value = 4 }</code>
Ici, p.Value déréférence le pointeur p et attribue la valeur 4 au champ Value de la structure pointée. Ce changement sera reflété dans i lorsque f reviendra.
Attribution de pointeurs aux pointeurs
Vous pouvez également modifier le pointeur lui-même dans la fonction f. Cependant, cela nécessite de transmettre l'adresse de la variable pointeur (&p) à f.
<code class="go">func f(p **Test) { *p = &Test{4} }</code>
Dans ce cas, *p déréférence le double pointeur p et attribue une nouvelle valeur de pointeur, modifiant ainsi la variable p en principal. Cependant, cette approche n'est pas aussi simple et peut être moins efficace que la modification directe de la valeur pointée.
Conclusion
Lors du passage de pointeurs vers des fonctions, il est crucial de comprendre le différence entre l'attribution de nouveaux pointeurs (p = &Test{4}) et la modification des valeurs pointées (p.Value = 4). Cette dernière approche permet une manipulation directe de la valeur de la structure, tandis que la première ne modifie que le pointeur lui-même.
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!