老师您好,结果体内定义结构体类型为什么要加* 不加*就报错了

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

寻曜

2021-04-20 16:17:57

type treeNode struct {
value int
  left, right *treeNode
}

结果体内定义结构体类型为什么要加*号,  不加*就报错了

写回答

1回答

ccmouse

2021-04-23

它的出错信息是不能循环定义。这个我们想一下,不加*号的话,treeNode里面的成员是treeNode,里面的成员又是treeNode。。。。不断循环下去。我们如果要分配一个treeNode,到底分配多少空间呢?这个没有答案,所以是不行的。


那么加*就不一样,left, right是指针,指针我们不管是什么类型的指针,大小都是一样的,都是指向结构体的地址。地址在我们通常64位机,那就是64位。所以left,right的空间是确定的。*treeNode只是修饰这个指针,告诉编译器它指向的这个结构是一个treeNode类型,treeNode类型就是一个整数加两个指针。这都是可行的。

0

0 学习 · 1399 问题

查看课程