第 9 章 / 共 20 章
指针
& 与 *、何时用指针
取地址与解引用
package main
import "fmt"
func main() {
n := 42
p := &n // p 是 *int
fmt.Println(*p) // 42
*p = 100
fmt.Println(n) // 100
}传值 vs 传指针
Go 所有函数参数都是值传递。想让函数修改调用者变量,传指针;想让大结构体不被拷贝,也传指针。
package main
import "fmt"
func grow(s *string) {
*s += "!"
}
func main() {
name := "go"
grow(&name)
fmt.Println(name) // go!
}new 与零值指针
new(T) 返回一个指向类型 T 零值的指针,等价于 &T{}。实际很少用。
package main
import "fmt"
func main() {
p := new(int)
*p = 5
fmt.Println(*p)
}没有指针运算
Go 不支持 p++ 之类的指针算术;想批量访问内存请用切片。