我学会了处理指针,在这个例子中我不明白为什么将 i3 重新分配给一个新的当前对象并执行 current = current.next 操作不会影响 i3 对象。但是,使用相同的地址
func main() {
i := &Node{data: 1}
i2 := &Node{data: 2, next: i}
i3 := &Node{data: 3, next: i2}
current := i3
for current.next != nil {
current = current.next
}
log.Println(current)
log.Println(i3)
/*
2020/06/03 12:19:23 &{1 <nil>}
2020/06/03 12:19:23 &{3 0xc42000e1f0}
*/
}
type Node struct {
data int
next *Node
}
而如果我不使用 i3 对象的副本,则该对象在循环中被很好地修改
func main() {
i := &Node{data: 1}
i2 := &Node{data: 2, next: i}
i3 := &Node{data: 3, next: i2}
log.Println(i3)
/*
2020/06/03 12:22:05 &{3 0xc42000e1f0}
*/
for i3.next != nil {
i3 = i3.next
}
log.Println(i3)
/*
2020/06/03 12:22:05 &{1 <nil>}
*/
}
哔哔one
隔江千里
茅侃侃
慕尼黑5688855
随时随地看视频慕课网APP
相关分类