Maison > développement back-end > Golang > Comment fonctionne le déréférencement de pointeur dans Go et comment se compare-t-il à C/C ?

Comment fonctionne le déréférencement de pointeur dans Go et comment se compare-t-il à C/C ?

Linda Hamilton
Libérer: 2024-12-10 07:01:13
original
216 Les gens l'ont consulté

How Does Pointer Dereferencing Work in Go, and How Does It Compare to C/C  ?

Comprendre le déréférencement de pointeur dans Go

Le déréférencement de pointeur, une opération fondamentale dans Go, implique d'accéder à la valeur pointée par une variable de pointeur. Dans l'exemple mentionné dans la question, les pointeurs sont utilisés pour manipuler une structure personnalisée, Vertex.

Pointeurs et structures

L'exemple original présentait la création d'instances Vertex, y compris une référence à une instance de Vertex à l'aide d'un pointeur. Dans l'exemple modifié, ce qui suit se produit :

t := *q
q.X = 4
Copier après la connexion

La première ligne déréférence le pointeur q et attribue sa valeur sous-jacente à t, créant ainsi une copie du sommet pointé. Par la suite, la modification de q.X met à jour l'instance Vertex d'origine mais n'affecte pas t car t contient une copie distincte de la structure.

Éviter les surprises avec les pointeurs

Pour garantir que les modifications effectués via un pointeur se reflètent dans d'autres références, les pointeurs doivent être utilisés de manière cohérente. Dans l'exemple révisé ci-dessous, t et q pointent tous deux vers le même Vertex sous-jacent :

t := q
Copier après la connexion

Avec ce changement, q.X = 4 met désormais à jour l'instance de Vertex accessible par t et q, ce qui donne le résultat attendu :

{1 2} &{4 2} {1 0} {0 0} &{4 2} {4 2} true
Copier après la connexion

Un parallèle en C/C

Contrairement au perception de « comportement extrêmement étrange », C/C présente un comportement similaire lorsque des pointeurs sont impliqués. Le code C suivant le démontre :

Vertex v = Vertex{1, 2};
Vertex* q = &v;
Vertex t = *q;
q->x = 4;
std::cout << "*q: " << *q << "\n";
std::cout << " t: " << t << "\n";
Copier après la connexion

La sortie est analogue à l'exemple Go modifié :

*q: { 4, 2 }
t: { 1, 2 }
Copier après la connexion

Par conséquent, le comportement de déréférencement du pointeur observé dans Go s'aligne sur le comportement des pointeurs dans d'autres langages de programmation, tels que C/C .

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal