我試圖弄清楚指針在 Go 中是如何工作的,我想我開始明白了,但這讓我很困惑,我真的不知道要搜索什么。假設(shè)我有以下功能:func createNode(nodeInfo string) *TreeNode { return &TreeNode{info: nodeInfo}}我知道該函數(shù)正在返回創(chuàng)建的結(jié)構(gòu)實(shí)例的內(nèi)存地址,但是函數(shù)簽名怎么說(shuō)*TreeNode?根據(jù)我的理解, the*用于取消引用指針以獲取值本身,那么這里發(fā)生了什么?也在這里: func zero(xPtr *int) { *xPtr = 0}func main() { x := 5 zero(&x)}相反的情況發(fā)生在函數(shù)接受運(yùn)算符的參數(shù)*但函數(shù)本身被運(yùn)算符調(diào)用的情況下&。
1 回答

交互式愛情
TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
有*
兩種用途,一種用于變量,一種用于類型:
對(duì)于類型,它表示類型是指針,而不是直接的值。
如您所知,對(duì)于變量,它取消引用指針。(也可以將這種用法區(qū)分為兩個(gè)“子用途”,如
*
在賦值的左側(cè),在*ptr = val
設(shè)置指針指向的值時(shí),*
通?!皺z索”指針指向的值。)
&
另一方面,只能用于變量并獲取內(nèi)存中對(duì)象的地址。
在您的示例中,根據(jù)types的使用,返回類型?*TreeNode
和參數(shù)類型?表示您正在返回/期望一個(gè)指針。相反,取消引用變量。*int
*xPtr = 0
?xPtr
要知道在您的情況下哪種用法是正確的,您必須自己弄清楚您是在處理類型還是變量。
- 1 回答
- 0 關(guān)注
- 118 瀏覽
添加回答
舉報(bào)
0/150
提交
取消