Heim  >  Artikel  >  Backend-Entwicklung  >  Fallstricke beim Aufruf einer Methode per Zeiger?

Fallstricke beim Aufruf einer Methode per Zeiger?

WBOY
WBOYnach vorne
2024-02-09 18:06:08535Durchsuche

Fallstricke beim Aufruf einer Methode per Zeiger?

In der PHP-Programmierung sind Zeiger ein leistungsstarkes Werkzeug, mit dem auf die Speicheradresse einer Variablen verwiesen und dann der Wert der Variablen geändert werden kann. Allerdings kann es beim Aufruf von Methoden mit Zeigern zu einigen Fallstricken und Problemen kommen, die mit Vorsicht gehandhabt werden müssen. In diesem Artikel stellt der PHP-Editor Banana ausführlich die Fallstricke von Zeigeraufrufmethoden vor, um Entwicklern dabei zu helfen, häufige Fehler und unnötige Probleme zu vermeiden. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel bietet Ihnen praktische Anleitungen und Ratschläge. Lassen Sie uns die Fallstricke von Zeigeraufrufmethoden erkunden und unsere Programmierkenntnisse verbessern!

Frageninhalt

Ich schreibe eine Implementierung über 2-3-4 Bäume. Die Knotenstruktur ist wie folgt

type Node struct {
    items  []int
    childs []*Node
    parent *Node
}

Der folgende Code verwirrt mich. Es scheint mir, dass diese beiden Teile dasselbe tun. Jedoch, Einer davon ist falsch.

  • Richtiger Code
cur = cur.parent
cur._insertNode(upTo, rn)
upTo, rn = cur._splitNode()
  • Codefehler
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent

Kann mir jemand sagen, was der Unterschied ist?

Was ich erwartet hatte, war eine Erklärung zu diesem Thema. Ist das eine Falle der Go-Zeigermethoden? Oder ein Compilerfehler?

Lösung

Angenommen, C ist der Knoten, auf den cur ursprünglich zeigte, cur原来指向的节点,AC原来的父节点,假设对 _insertNodeA ist der ursprüngliche übergeordnete Knoten von C, vorausgesetzt, dass der Aufruf an _insertNodeerfolgt > wird einen neuen Knoten B zwischen A

und

C

einfügen, also beginnen wir hier:

A
|
C

(plus andere Knoten, die für meinen Standpunkt nicht relevant sind):

A
|
B
|
C
_insertNode之前,C的父级是A;调用 _insertNode (plus andere Knoten, die für meinen Standpunkt immer noch irrelevant sind). Es ist zu beachten, dass vor dem Aufruf von _insertNode das übergeordnete Element von C

A

ist; nach dem Aufruf von _insertNode ist das übergeordnete Element von

C

B

.

🎜Vor diesem Hintergrund finden Sie hier Ihren „richtigen Code“, zusammen mit Kommentaren, die erklären, was er bewirkt: 🎜
// 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()
🎜Hier ist Ihr „Fehlercode“ sowie ein Kommentar, der erklärt, was er tut: 🎜
// 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
🎜Hast du es gesehen? 🎜

Das obige ist der detaillierte Inhalt vonFallstricke beim Aufruf einer Methode per Zeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen