指针
-
概念
存储另一个变量的内存地址的变量
-
获取变量地址
Go语言的取地址符是&,放到一个变量前使用返回相应的变量的内存地址
-
声明指针
*T是指针变量的类型,它指向T类型的值
var var_name *var_type
-
获取指针的值
获取一个指针意味着访问可访问指针指向的变量的值。
语法为: *pointer
-
操作变量
操作变量,更改数值,并不会更改变量的地址
-
通过指针操作变量
通过指针修改数值,也不会更改变量的地址
-
指针的指针
存放另一个指针变量地址的变量
var a **p b := 10 c := &b a = &c
-
数组指针
首先是一个指针,存储了一个数组的地址
*[4]Type
s := [4]int{1,2,3,4} sp := &s fmt.Println(sp) //&[1 2 3 4] 打印出指针sp的字符表示形式 fmt.Printf("%p ",sp) //打印数组s的地址 fmt.Printf("%p ",&sp) //打印指针sp的地址 //通过指针操作数组 (*sp)[0]=100 fmt.Println(s[0]) //100 sp[0]=200 //简化写法 fmt.Println(s[0]) //200
-
指针数组
首先是一个数组,存储的数据类型是指针
[4]*Type
a := 1 b := 2 c := 3 d := 4 arr2 := [4]int{a,b,c,d} //数组arr2中存放的是变量a,b,c,d的副本,说明是通过值传递方式创建的数组 arr3 := [4]*int{&a,&b,&c,&d}
-
函数指针
-
首先是一个指针,指向了一个函数的指针
因为go语言中,function,默认看作一个指针,没有*
func f(){} //函数名f本身就是个函数指针,存储了函数体的地址
-
默认引用类型的类型
slice,map,function
-
-
指针函数
首先是一个函数,该函数的返回值是一个指针
func fun2() *[4]int{ arr := [4]int{1,2,3,4} return &arr }
-
指针作为参数
指针因为是引用类型,所以作为参数传递参数地址,通过指针能直接修改源数据。
-
注意
指针只是针对非引用类型使用,如slice等引用类型没必要使用指针