猿问

具有混合返回/签名类型的 Go 函数

我试图弄清楚指针在 Go 中是如何工作的,我想我开始明白了,但这让我很困惑,我真的不知道要搜索什么。假设我有以下功能:


func createNode(nodeInfo string) *TreeNode {

    return &TreeNode{info: nodeInfo}

}

我知道该函数正在返回创建的结构实例的内存地址,但是函数签名怎么说*TreeNode?根据我的理解, the*用于取消引用指针以获取值本身,那么这里发生了什么?


也在这里:


 func zero(xPtr *int) {

  *xPtr = 0

}


func main() {

  x := 5

  zero(&x)

}

相反的情况发生在函数接受运算符的参数*但函数本身被运算符调用的情况下&。


心有法竹
浏览 82回答 1
1回答

交互式爱情

有*两种用途,一种用于变量,一种用于类型:对于类型,它表示类型是指针,而不是直接的值。如您所知,对于变量,它取消引用指针。(也可以将这种用法区分为两个“子用途”,如*在赋值的左侧,在*ptr = val设置指针指向的值时,*通常“检索”指针指向的值。)&另一方面,只能用于变量并获取内存中对象的地址。在您的示例中,根据types的使用,返回类型 *TreeNode和参数类型 表示您正在返回/期望一个指针。相反,取消引用变量。*int*xPtr = 0 xPtr要知道在您的情况下哪种用法是正确的,您必须自己弄清楚您是在处理类型还是变量。
随时随地看视频慕课网APP

相关分类

Go
我要回答