老师,你好。为什么node struct里的right,left必须是*node指针类型不能是node类型。否则编译器报错,递归节点类型无效
来源:4-1 结构体和方法

qq_我姓杨你叫我周先生_0
2019-03-09
package main
import "fmt"
//声明一个结构体
type node struct {
value int
right,left node
}
func (this *node) setValue(value int) {
this.value=value
}
func (this node) Pritln(){
if this.value==0{
return
}
this.left.Pritln()
fmt.Println(this.value)
this.right.Pritln()
}
func main() {
var tree1 node
fmt.Println(tree1)
tree1.setValue(9)
var tree2 node
tree2.setValue(11)
var tree3 node=node{10,tree2,tree1}
tree3.Pritln()
}
写回答
1回答
-
因为node类型还没有被定义出来,编译器不知道这种类型占用多个字节的内存,因此在node类型里面定义node类型的属性(left,right)的时候,就会导致编译无法确定其具体占用多少内存空间而报错;但是如果使用的是指针类型的话,指针在32位机器固定占用4个字节,在64位机器固定占用8个字节,编译器可以正确识别,因此可以准确的确认它的内存占用情况,就不会报错。
012019-04-27
相似问题