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

Comment comprendre le découpage de structure dans Golang

WBOY
Libérer: 2024-02-06 08:35:03
avant
1247 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal