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

Fallstricke beim Aufruf einer Methode per Zeiger?

WBOY
Freigeben: 2024-02-09 18:06:08
nach vorne
563 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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()
Nach dem Login kopieren
  • Codefehler
cur.parent._insertNode(upTo, rn)
upTo, rn = cur.parent._splitNode()
cur = cur.parent
Nach dem Login kopieren

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 _insertNode</code erfolgt > wird einen neuen Knoten </em>B<em> zwischen </em>A</p> und <p>C</p> einfügen, also beginnen wir hier: <p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">A | C</pre><div class="contentsignin">Nach dem Login kopieren</div></div> </p> (plus andere Knoten, die für meinen Standpunkt nicht relevant sind): <p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">A | B | C</pre><div class="contentsignin">Nach dem Login kopieren</div></div> <code>_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()
Nach dem Login kopieren
🎜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
Nach dem Login kopieren
🎜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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage