关于指针
要搞明白 Go 语言中的指针需要先知道 3 个概念: 指针地址、指针类型、指针取值
- 指针地址(
&a
) - 指针取值(
*&a
) - 指针类型(
&a
) —>*int
改变数据传指针 - 变量的本质是给存储数据的内存地址起了一个好记的别名。
- 比如我们定义了一个变量
a := 10
,这个时候可以直接通过a
这个变量来读取内存中保存的10
这个值。 - 在计算机底层
a
这个变量其实对应了一个内存地址。 - 指针也是一个变量,但它是一种特殊的变量,它存储的数据不是一个普通的值,而是另一个变量的内存地址。
- Go 语言中的指针操作非常简单,我们只需要记住两个符号:
&
(取地址)和*
(根据地址取值)
package main
import "fmt"
func main() {
var a = 10
fmt.Printf("%d \n", &a) // &a 指针地址 (824633761976)
fmt.Printf("%d \n", *&a) // *&a 指针取值 (10)
fmt.Printf("%T \n", &a) // %T 指针类型 (*int )
}
&
取变量地址
&
符号取地址操作
package main
import "fmt"
func main() {
var a = 10
var b = &a
var c = *&a
fmt.Println(a) // 10 a的值
fmt.Println(b) // 0xc00001e060 a变量的内存地址
fmt.Println(c) // 10 *内存地址 取值
}