老师,你好。为什么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回答

宸思隐者

2019-03-09

因为node类型还没有被定义出来,编译器不知道这种类型占用多个字节的内存,因此在node类型里面定义node类型的属性(left,right)的时候,就会导致编译无法确定其具体占用多少内存空间而报错;但是如果使用的是指针类型的话,指针在32位机器固定占用4个字节,在64位机器固定占用8个字节,编译器可以正确识别,因此可以准确的确认它的内存占用情况,就不会报错。

0
1
qq_我姓杨你叫我周先生_0
非常感谢!
2019-04-27
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程