老师,问一个内存管理的问题
来源:10-2 课程总结&课后练习
Echo鑫
2019-03-18
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值,这是什么原因。
写回答
2回答
-
慕盖茨5387556
2019-07-20
a和s是两个不同的变量,里面存放是同一个内存地址.
00 -
小鱼儿老师
2019-03-21
s是对象,&s就是对象的地址。
a是指针,&s就是指针的地址。
因此不同。
a.Next与s.Next都是取ListNode的Next属性,在GO里是都是通过.实现的,在C/C++里后者需要用s->Next表示。
因此,&a.Next和&s.Next都是取Next成员的地址,没有区别。
00
相似问题