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