Maison  >  Article  >  développement back-end  >  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
WBOYavant
2024-02-09 18:06:08537parcourir

Les pièges de l’appel d’une 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
}

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()
  • Erreur de code
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent

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 sera en Insérer un nouveau nœud B entre A

et

C

donc, on commence ici :

;

A
|
C

(plus d'autres nœuds, sans rapport avec mon point de vue) :

A
|
B
|
C
_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()
🎜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
🎜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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer