请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

nil指针是什么?

老师你好,请问nil指针是什么?
请问是不是在该对象未实例化的时候, 直接获取指针的时候, 会返回一个nil?
也就是说如果想要用这个类的指针, 就必须先正常的实例化一下, 然后再用指针.

	//这里作为Nil指针的展示, go的nil指针也是可以传递的,但是注意在setValue的时候, 由于这个node并不存在,所以会报一个错误,但是传递时没问题的
	//而且下面的print也是一个nil
	var pRoot *treeNode	////这里会是一个Nil指针
	fmt.Println(pRoot)
	pRoot.setValue(200)
	//可以看到里的调用和设置时没问题的,node不会存在==nil的确情况
	//而且下面的print也是有内容的
	pRoot = &root
	fmt.Println(pRoot)
	pRoot.setValue(300)
	pRoot.print()

	//root.traverse()

正在回答

1回答

nil就是空指针。

var pRoot *treeNode这行,没有告诉它指向谁,当然就是nil。

但是Go语言中,一个很大的不同就是nil指针是可以调用方法的。我们看到方法的定义里,只是把这个所谓的“接收者”(也就是这里的pRoot)放在一个特殊的地方,不论是定义还是调用的时候有特殊的写法(比如pRoot.setValue(...)),但实际上只是传了一个参数pRoot给setValue方法的接收者,所以这里是可以为nil的。当然后面我们去试图pRoot.value什么的,那就出错了。

总结一下就是我们当然还是要实例化才可以用的,但是不实例化也不会立刻出错。他的好处我们可以看到我们的树的遍历这个例子里面,可以在方法的进口处进行统一判断。


0 回复 有任何疑惑可以回复我~
  • 提问者 阿憨阿憨 #1
    谢谢老师
    回复 有任何疑惑可以回复我~ 2018-11-23 14:40:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信