指针
简单的说,指针就是存储变量地址的变量。
变量只是一种占位符而已,用于显示内存地址。
获取变量的地址
go语言的获取地址符说&,放到变量前使用就会返回该变量的地址。
func main() {
a := 10
fmt.Println(&a) //0xc0000a6008
}
声明指针
声明一个指针,可以使用*
var v *Type
var i *int //指向int
var f *float32 //指向float
func main() {
var i int = 20
var ip *int
ip = &i
fmt.Println("i的值:", i)
fmt.Println("i的内存地址:", &i)
fmt.Println("ip 的值: ", ip)
fmt.Println("ip 的内存地址: ", &ip)
}
i的值: 20
i的内存地址: 0xc0000a6008
ip 的值: 0xc0000a6008
ip 的内存地址: 0xc00009a018
获取指针的值
获取一个指针的值,可以在指针变量前面加上*
var i int = 20
var ip *int
ip = &i
fmt.Println("指针的值: ", *ip) //20
指针的指针
指针的指针其实跟指针是一样的
func main() {
var p int = 20
var p1 *int
var p2 **int
p1 = &p
p2 = &p1
fmt.Println(p2) //打印的是p1的地址
fmt.Println(&p2) //打印的是p2的地址
fmt.Println(&p1) //打印的是p1的地址
fmt.Println(p1) //打印的是p的地址
fmt.Println(&p) //打印的是p的地址
}
0xc0000a2018
0xc0000a2020
0xc0000a2018
0xc0000a8008
0xc0000a8008
数组指针和指针数组
数组指针首先是一个指针,一个数组的地址。
指针数组是一个数组,存储的数据类型是指针。
数组指针:
arr1 := [3]int{1, 2, 3}
var p *[3]int
p = &arr1 //p就是一个数组指针
*[4]string 存储了4个字符串的数组的指针
指针数组:
[3]*string 存储了3个字符串指针的数组