老师您好,结果体内定义结构体类型为什么要加* 不加*就报错了
来源:4-1 结构体和方法
寻曜
2021-04-20 16:17:57
type treeNode struct {
value int
left, right *treeNode
}
结果体内定义结构体类型为什么要加*号, 不加*就报错了
1回答
它的出错信息是不能循环定义。这个我们想一下,不加*号的话,treeNode里面的成员是treeNode,里面的成员又是treeNode。。。。不断循环下去。我们如果要分配一个treeNode,到底分配多少空间呢?这个没有答案,所以是不行的。
那么加*就不一样,left, right是指针,指针我们不管是什么类型的指针,大小都是一样的,都是指向结构体的地址。地址在我们通常64位机,那就是64位。所以left,right的空间是确定的。*treeNode只是修饰这个指针,告诉编译器它指向的这个结构是一个treeNode类型,treeNode类型就是一个整数加两个指针。这都是可行的。
相似问题