指针

Go 拥有指针。指针保存了值的内存地址。

类型 *T 是指向 T 类型值的指针。其零值为 nil

  1. var p *int

& 操作符会生成一个指向其操作数的指针。

  1. i := 42
  2. p = &i

* 操作符表示指针指向的底层值。

  1. fmt.Println(*p) // 通过指针 p 读取 i
  2. *p = 21 // 通过指针 p 设置 i

这也就是通常所说的“间接引用”或“重定向”。

与 C 不同,Go 没有指针运算。

pointers.go

  1. package main
  2. import "fmt"
  3. func main() {
  4. i, j := 42, 2701
  5. p := &i // 指向 i
  6. fmt.Println(*p) // 通过指针读取 i 的值
  7. *p = 21 // 通过指针设置 i 的值
  8. fmt.Println(i) // 查看 i 的值
  9. p = &j // 指向 j
  10. *p = *p / 37 // 通过指针对 j 进行除法运算
  11. fmt.Println(j) // 查看 j 的值
  12. }