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
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
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 0x3001Hier 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
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
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
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!