指针
数组指针与指针数组
数组指针:首先是一个指针,一个数组的地址。
*[4]Type
指针数组:首先是一个数组,存储的数据类型是指针
[4]*Type
指针数组应用
a := 1 b := 2 c := 3 d := 4 //将变量a b c d的值赋给数组arr1(值传递) arr1 := [4]int{a, b, c, d} arr2 := [4]*int{&a, &b, &c, &d} fmt.Println(arr1) fmt.Println(arr2) fmt.Println("--------------------") //将arr1的第一个值改为100,不影响变量a的值 arr1[0] = 100 fmt.Println(arr1) fmt.Println("a的值是:", a) fmt.Println("--------------------") //将指针数组arr2的第一个变量地址对应的值改为200,变量a的值随之改变,arr1不受影响 *arr2[0] = 200 fmt.Println(arr1) fmt.Println(arr2) fmt.Println("a的值是:", a) fmt.Println("--------------------") //将变量b的值改为1000,arr1不受影响,指针数组arr2第二个地址的值改为1000 b = 1000 fmt.Println(arr1) for i := 0; i < len(arr2); i++ { fmt.Println(*arr2[i]) }
运行结果:
[1 2 3 4]
[0xc00000a0b8 0xc00000a0d0 0xc00000a0d8 0xc00000a0e0]
--------------------
[100 2 3 4]
a的值是: 1
--------------------
[100 2 3 4]
[0xc00000a0b8 0xc00000a0d0 0xc00000a0d8 0xc00000a0e0]
a的值是: 200
--------------------
[100 2 3 4]
200
1000
3
4
指针函数
返回值为指针类型的函数
func main() { arr1 := fun1() fmt.Printf("arr1中存储的数组的地址:%p\n", arr1) fmt.Printf("arr1中存储的数组的类型:%T\n", arr1) fmt.Printf("arr1中存储的数组的地址的地址:%p\n", &arr1) fmt.Printf("arr1中存储的数组的值:%v\n", arr1) } func fun1() *[4]int { arr := [4]int{1, 2, 3, 4} fmt.Printf("函数中arr的地址:%p\n", &arr) return &arr }
函数中arr的地址:0xc000060140
arr1中存储的数组的地址:0xc000060140
arr1中存储的数组的类型:*[4]int
arr1中存储的数组的地址的地址:0xc00008c018
arr1中存储的数组的值:&[1 2 3 4]