我试图弄清楚指针在 Go 中是如何工作的,我想我开始明白了,但这让我很困惑,我真的不知道要搜索什么。假设我有以下功能:func createNode(nodeInfo string) *TreeNode { return &TreeNode{info: nodeInfo}}我知道该函数正在返回创建的结构实例的内存地址,但是函数签名怎么说*TreeNode?根据我的理解, the*用于取消引用指针以获取值本身,那么这里发生了什么?也在这里: func zero(xPtr *int) { *xPtr = 0}func main() { x := 5 zero(&x)}相反的情况发生在函数接受运算符的参数*但函数本身被运算符调用的情况下&。
1 回答
交互式爱情
TA贡献1712条经验 获得超3个赞
有*
两种用途,一种用于变量,一种用于类型:
对于类型,它表示类型是指针,而不是直接的值。
如您所知,对于变量,它取消引用指针。(也可以将这种用法区分为两个“子用途”,如
*
在赋值的左侧,在*ptr = val
设置指针指向的值时,*
通常“检索”指针指向的值。)
&
另一方面,只能用于变量并获取内存中对象的地址。
在您的示例中,根据types的使用,返回类型 *TreeNode
和参数类型 表示您正在返回/期望一个指针。相反,取消引用变量。*int
*xPtr = 0
xPtr
要知道在您的情况下哪种用法是正确的,您必须自己弄清楚您是在处理类型还是变量。
- 1 回答
- 0 关注
- 81 浏览
添加回答
举报
0/150
提交
取消