第一个地方:
这里箭头指向的内存地址是谁的,我理解不应该是 nil 吗
第二个问题是:
这个接收者的问题,这个概念我有点不太懂,网上查了下资料也不太能理解。
按照我的理解:(以下面的方法为例)
func (node treeNode) print() {
fmt.Print(node.value, "\n")
}
func (node *treeNode) print2() {
fmt.Print(node.value, "\n")
}
...
func main() {
var root treeNode
var root2 *treeNode
...
root.print()
root2.print2()
root.print2()
root2.print()
}
(node treeNode) 就是值接收者类型,(node *treeNode) 就是指针接收者类型
root 是值类型的调用者,root2是指针类型的调用者
1.root.print() -> 标准的值类型调用者匹配值类型接收者
2. root2.print2() -> 标准的指针类型的调用者匹配指针类型接收者
3. root.print2() -> 值类型调用者匹配指针类型接收者 -> (&root).print2()
4. root2.print() -> 指针类型的调用者匹配值类型接收者 -> (*root2).print()
还有这个的原理我也没太明白
func (node *treeNode) setValue(info int) {
node.value = info
}
func (node treeNode) setValue(info int) {
node.value = info
}
结论我知道,用指针,值就发生改变,不用指针,修改就不生效。,这个副本的概念。这个副本是什么的副本?
登录后可查看更多问答,登录/注册