本文最初發表在我的個人博客,查看原文,獲得更好的閱讀體驗
Go語言有指針的概念,指針保存了值的內存地址。指針的零值爲nil
。指針類型表示指向給定類型的變量的所有指針的集合,該類型稱爲指針的基本類型。
給定一個類型T
,其中類型*T
是指向T
類型值的指針:
package main
import "fmt"
func main() {
var p *int
i := 5
p = &i // 指針指向變量i
fmt.Println(p)
fmt.Println(*p)
*p = 10 // 使用指針給變量賦值
fmt.Println(i) // 10
*p = *p * 7 // 使用指針進行運算
fmt.Println(i) // 70
}
取址操作符(&
)會生成一個指向其操作數的指針:
i := 5
p = &i // 指針指向變量i
星號(*
)操作符表示指針指向的底層值:
fmt.Println(*p) // 通過指針 p 讀取 i
*p = 10 // 通過指針 p 設置 i
這也就是通常所說的“間接引用”或“重定向”。另外,Go語言中沒有指針運算。
參考:
https://golang.org/ref/spec#Pointer_types
https://tour.golang.org/moretypes/1