初学 golang 时,如果对指针不太了解的话,经常会在指针这个概念中给搞晕,所以这里就记录下初学 golang 时对指针的理解。

首先各种 golang 学习书籍中,会遇到这样的介绍。

指针(pointer)概念在 Go 语言中被拆分为两个核心概念:

  • 类型指针,允许对这个指针类型的数据进行修改。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。
  • 切片,由指向起始元素的原始指针、元素数量和容量组成。

认识指针地址和指针类型

&

格式如下:

ptr := &v    // v的类型为T
*T*
例2:
x:=1
y:=&x
fmt.Printf("x=%d\n",x) // x=1
fmt.Println(y) // 0xc0000823f8 //内存地址
*y=8
fmt.Printf("x=%d\n",x) //x=8

上面的例子中,y 就是一个指针类型,如果遇到下面这样的声明方式

例3:
var x int
var y *int //表示y 是一个指向int类型变量的内存地址
a=1
y=&x
var x inta=1