1 简介

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。
Go语言中的函数传参都是值拷贝,
当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。
传递数据使用指针,而无须拷贝数据。
Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。

2 指针地址 与 指针类型

  1. func main() {
  2. a := 10
  3. b := &a
  4. fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0xc00001a078
  5. fmt.Printf("b:%p type:%T\n", b, b) // b:0xc00001a078 type:*int
  6. fmt.Println(&b) // 0xc00000e018
  7. }

3 指针取值

在对普通变量使用&操作符取地址后会获得这个变量的指针,然后可以对指针使用*操作,也就是指针取值

  1. func main() {
  2. //指针取值
  3. a := 10
  4. b := &a // 取变量a的地址,将指针保存到b
  5. fmt.Printf("type of b:%T\n", b) // type of b:*int
  6. c := *b // 指针取值(根据指针去内存取值)
  7. fmt.Printf("type of c:%T\n", c) // type of c:int
  8. fmt.Printf("value of c:%v\n", c) // value of c:10
  9. }