Heim >Backend-Entwicklung >Golang >Wie man Struktur-Slicing in Golang versteht

Wie man Struktur-Slicing in Golang versteht

WBOY
WBOYnach vorne
2024-02-06 08:35:031263Durchsuche

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

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 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

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!

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