我試圖弄清楚指針在 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
設置指針指向的值時,*
通?!皺z索”指針指向的值。)
&
另一方面,只能用于變量并獲取內存中對象的地址。
在您的示例中,根據types的使用,返回類型?*TreeNode
和參數類型?表示您正在返回/期望一個指針。相反,取消引用變量。*int
*xPtr = 0
?xPtr
要知道在您的情況下哪種用法是正確的,您必須自己弄清楚您是在處理類型還是變量。
- 1 回答
- 0 關注
- 108 瀏覽
添加回答
舉報
0/150
提交
取消