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!
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.
cur = cur.parent cur._insertNode(upTo, rn) upTo, rn = cur._splitNode()
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?
Angenommen, C ist der Knoten, auf den cur
ursprünglich zeigte, cur
原来指向的节点,A为C原来的父节点,假设对 _insertNode
A 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
ist; nach dem Aufruf von _insertNode
ist das übergeordnete Element von
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()
// 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
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!