Wie man Struktur-Slicing in Golang versteht

WBOY
Freigeben: 2024-02-06 08:35:03
nach vorne
1229 Leute haben es durchsucht

Wie man Struktur-Slicing in Golang versteht

Frageninhalt

Ich bin neu in Golang und versuche, Hinweise zu verstehen.

type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}

queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
pre:=queue[len(queue)-1]
pre.Left = &node
Nach dem Login kopieren

Aber ich habe gefunden, dass die Warteschlange[0].Links immer noch Null ist

type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}

queue:=[]*TreeNode{&TreeNode{}}
node:=&TreeNode{Val: 1}
pre := queue[len(queue)-1]
pre.Left = node
Nach dem Login kopieren

Diesmal ist queue[0].Left nicht gleich Null

Kann mir jemand helfen zu verstehen, warum das passiert?

Es wäre toll, wenn du es auf Gedächtnisebene erklären könntest.

Zum Beispiel: Wir haben ein TreeNode-Slice bei 0x1001 Was ist also in der Adresse gespeichert? Und wie das Slice mit einem TreeNode verknüpft ist, zum Beispiel Adresse 0x3001


Richtige Antwort


Hier ist, was im ersten Codeabschnitt passiert:

queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
// Copy last element of slice to local variable pre
pre:=queue[len(queue)-1] 
// Assign field in local variable pre.  The slice element is
// not modified.
pre.Left = &node
Nach dem Login kopieren

Das ist der zweite Clip:

queue:=[]*TreeNode{&TreeNode{}}
node:=&TreeNode{Val: 1}

// Copy last element of queue to local variable pre.
// pre and the last element of queue have the same pointer
// value (it was just copied) and point at the same node.
pre := queue[len(queue)-1]

// Set the left field in the node that pre points to. queue[0]
// also points at this node.
// This code is syntactic sugar for (*pre).Left = node.
pre.Left = node
Nach dem Login kopieren

Um das erste Beispiel zu beheben, ändern Sie das Slice-Element anstelle der lokalen Variablen pre. Eine Möglichkeit besteht darin, Zeiger zum Aufteilen von Elementen zu verwenden.

queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
// Variable pre is pointer to last element in slice.
pre:= &queue[len(queue)-1] 

// Set the left field in the node that pre points to. This
// is the same value as queue[0].
pre.Left = &node
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie man Struktur-Slicing in Golang versteht. 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