关于指针和nil (4-1)

来源:4-1 结构体和方法

慕田峪983

2021-01-25

图片描述
图片描述
老师,您好。这里我有个点没弄懂。 pRoot = &root 这里将root的地址赋值给了pRoot, 那么pRoot不是应该就有了root.value属性吗(pRoot指向&root)?为什么在之后的.value的调用中会变成空指针呢?

写回答

1回答

ccmouse

2021-01-27

这里是我录像中一开始写的有问题的地方。

我们看20:03

//img1.sycdn.imooc.com/szimg/6010e72109fffd0c17080976.jpg

这里我们在运行pRoot.setValue(200)的时候,它首先把这句话Setting value to nil node.打出来,然后继续运行19行,此时node是nil,就造成了panic。就是说这个panic发生在pRoot.setValue(200),而不是发生在pRoot.setValue(300)

后面我改掉了这个bug,就是在if node==nil之后加了return。见21:07


0
1
慕田峪983
明白了,理了一下,当 var a *treeNode时,这时 *treeNode 里的value也变成了一个*value,也就是如果在初始化时没有赋值时,那么 a.value 的结果就是 nil(因为a.*value不存在,指针指向空地址) ,而nil可以被传入setValue(因为是一个指针接收函数),但在进行a.value = value 操作时会panic。
2021-01-27
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程