问题内容
我是 golang 新手,正在尝试理解指针。
但是我发现queue[0].Left仍然是nil
这次queue[0].Left不为nil
有人可以帮我理解为什么会这样吗?
立即学习
“
go语言免费学习笔记(深入)
”;
如果你能在记忆层面上解释一下那就太好了。
例如:
我们在 0x1001 处有一个 TreeNode 切片
那么地址中存储了什么
以及切片如何链接到 A TreeNode,例如,地址 0x3001
正确答案
以下是第一段代码中发生的情况:
这是第二个片段:
要修复第一个示例,请修改切片元素而不是局部变量 pre。一种方法是使用指向切片元素的指针。
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
queue:=[]TreeNode{TreeNode{}}
node:=TreeNode{Val: 1}
pre:=queue[len(queue)-1]
pre.Left = &nodetype TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
queue:=[]*TreeNode{&TreeNode{}}
node:=&TreeNode{Val: 1}
pre := queue[len(queue)-1]
pre.Left = nodequeue:=[]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 = &nodequeue:=[]*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 = nodequeue:=[]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