一个基础的问题
来源: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回答
-
同学你好, a和s是两个不同的指针变量, 但指向同一个对象也就是同一个内存空间;
而对于&a和&s, 这两个操作是取a及s的地址, 这两个变量的地址自然是不一样的;
&a.Next与&s.Next的地址一样,是因为他们指向的同一个对象, 所以*a也等于*s;
所以修改a.Next, s.Next会变;修改a.Val, s.Val也是会变的。
012019-03-29
相似问题