Maison > développement back-end > Golang > Les pièges de l'appel d'une méthode par pointeur ?

Les pièges de l'appel d'une méthode par pointeur ?

WBOY
Libérer: 2024-02-09 18:06:08
avant
563 Les gens l'ont consulté

Les pièges de lappel dune méthode par pointeur ?

En programmation PHP, les pointeurs sont un outil puissant qui peut être utilisé pour référencer l'adresse mémoire d'une variable puis modifier la valeur de la variable. Cependant, l'appel de méthodes avec des pointeurs peut présenter certains pièges et problèmes, qui doivent être traités avec prudence. Dans cet article, l'éditeur PHP Banana présentera en détail les pièges des méthodes d'appel de pointeurs pour aider les développeurs à éviter les erreurs courantes et les problèmes inutiles. Que vous soyez débutant ou développeur expérimenté, cet article vous fournira des orientations et des conseils pratiques. Explorons les pièges des méthodes d'appel de pointeurs et améliorons nos compétences en programmation !

Contenu de la question

J'écris une implémentation sur 2-3-4 arbres. La structure des nœuds est la suivante

type Node struct {
    items  []int
    childs []*Node
    parent *Node
}
Copier après la connexion

Je suis confus par le code ci-dessous. Il me semble que ces deux parties font la même chose. Cependant, L'un d'eux a tort.

  • Code correct
cur = cur.parent
cur._insertNode(upTo, rn)
upTo, rn = cur._splitNode()
Copier après la connexion
  • Erreur de code
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent
Copier après la connexion

Quelqu’un peut-il me dire quelle est la différence ?

Ce que j'attendais, c'était une explication sur cette question. Est-ce un écueil des méthodes de pointage Go ? Ou une erreur du compilateur ?

Solution

Supposons que C soit le nœud vers lequel cur a initialement pointé, cur原来指向的节点,AC原来的父节点,假设对 _insertNodeA est le nœud parent d'origine de C, en supposant que l'appel à _insertNode</code > sera en Insérer un nouveau nœud </em>B<em> entre </em>A</p> et <p>C</p> donc, on commence ici : <p> ; <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">A | C</pre><div class="contentsignin">Copier après la connexion</div></div> </p> (plus d'autres nœuds, sans rapport avec mon point de vue) : <p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">A | B | C</pre><div class="contentsignin">Copier après la connexion</div></div> <code>_insertNode之前,C的父级是A;调用 _insertNode (plus d'autres nœuds, toujours sans rapport avec mon propos). Il est à noter qu'avant d'appeler _insertNode, le parent de C est

A

 ; après avoir appelé _insertNode, le parent de

C

est

B

.

🎜Dans cet esprit, voici votre "code correct", accompagné de commentaires expliquant ce qu'il fait : 🎜
// initially, cur = C

// set cur = A:
cur = cur.parent

// insert B between A and C:
cur._insertNode(upTo, rn)

// cur is still A

// split A:
upTo, rn = cur._splitNode()
Copier après la connexion
🎜Voici votre "code erreur", plus un commentaire expliquant ce qu'il fait : 🎜
// initially, cur = C

// insert B between A and C:
cur.parent._insertNode(upTo, rn)

// cur.parent is now B

// split B:
upTo, rn = cur.parent._splitNode()

// set cur = B:
cur = cur.parent
Copier après la connexion
🎜L'avez-vous vu ? 🎜

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal