golang 的指针
go 语言的函数传参都是值拷贝,当我们想要改变某个变量时,我们可以创建该变量的地址的指针变量,无需拷贝数据
类型指针不能进行偏移和运算
go语言中的指针操作非常简单,只需要记住两个符号, &
(取地址)和*
(根据地址取值)
指针地址和指针类型
每个变量在运行时都有一个地址,这个地址代表变量在内存中的位置。go语言使用&
字符在变量前面对变量进行 取地址 操作。go语言中的值类型都有对应的指针类型,比如*int
\ *int64
\ *string
指针语法
一个指针变量指向了一个值的内存地址
go
var s = "hello"
var p *string
p = &s
fmt.Printf("p: %v\n", p)
1
2
3
4
2
3
4
指向数组的指针
go里面,整个数组没有指针,但是数组里面每个值,都有指针,所以我们定义数组的指针思路也是如此
go
var pa [5]*int
var slice = [5]int{1, 2, 3, 4, 5}
for i := range slice {
pa[i] = &slice[i]
}
fmt.Printf("pa: %v\n", pa) // -> pa: [0xc00000e420 0xc00000e428 0xc00000e430 0xc00000e438 0xc00000e440]
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8