一个基础的问题

来源:6-6 分块上传场景测试+小结

Echo鑫

2019-03-28

type ListNode struct {
	Val int
	Next *ListNode
}

func main() {
	s := &ListNode{Val:0}
	a := s
	a.Next = &ListNode{Val:1}
	fmt.Printf("%+v
",&a)
	fmt.Printf("%+v
",&s)
	fmt.Printf("%+v
",&a.Next)
	fmt.Printf("%+v
",&s.Next)
}

图片描述
老师我想问下,我这代码执行后,&a与&s值是不一样的,但是&a.Next 却与&s.Next地址却是一样的,修改a.Next值会影响到s.Next值,这是什么原因?

写回答

1回答

xiaomo

2019-03-28

同学你好, a和s是两个不同的指针变量, 但指向同一个对象也就是同一个内存空间;

而对于&a和&s, 这两个操作是取a及s的地址, 这两个变量的地址自然是不一样的;

&a.Next与&s.Next的地址一样,是因为他们指向的同一个对象, 所以*a也等于*s;

所以修改a.Next, s.Next会变;修改a.Val, s.Val也是会变的。

//img.mukewang.com/szimg/5c9ceb7700011ae705420364.jpg


0
1
Echo鑫
非常感谢!
2019-03-29
共1条回复

Go实战仿百度云盘-实现企业级分布式云存储系统

紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员

1077 学习 · 494 问题

查看课程