Maison >développement back-end >Golang >Comment comprendre le découpage de structure dans Golang

Comment comprendre le découpage de structure dans Golang

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBavant
2024-02-06 08:35:031283parcourir

Comment comprendre le découpage de structure dans Golang

Contenu des questions

Je suis nouveau sur Golang et j'essaie de comprendre les pointeurs.

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

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

Mais j'ai trouvé cette file d'attente[0].La gauche est toujours nulle

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

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

Cette file d'attente[0].La gauche n'est pas nulle

Quelqu'un peut-il m'aider à comprendre pourquoi cela se produit ?

Ce serait formidable si vous pouviez l'expliquer au niveau de la mémoire.

Par exemple: Nous avons une tranche TreeNode à 0x1001 Alors, qu’est-ce qui est stocké dans l’adresse ? Et comment la tranche est liée à A TreeNode, par exemple, adresse 0x3001

Bonne réponse


Voici ce qui se passe dans le premier morceau de code :

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

Voici le deuxième 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

Pour corriger le premier exemple, modifiez l'élément slice au lieu de la variable locale pre. Une solution consiste à utiliser des pointeurs pour découper des éléments.

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer