老师,问一个内存管理的问题

来源: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是两个不同的变量,里面存放是同一个内存地址.

0
0

小鱼儿老师

2019-03-21

s是对象,&s就是对象的地址。

a是指针,&s就是指针的地址。


因此不同。


a.Next与s.Next都是取ListNode的Next属性,在GO里是都是通过.实现的,在C/C++里后者需要用s->Next表示。


因此,&a.Next和&s.Next都是取Next成员的地址,没有区别。

0
0

Go语言开发分布式任务调度 轻松搞定高性能Crontab

分布式系统设计+高并发细节处理,一次性让你“晋级”到位

1136 学习 · 177 问题

查看课程