指针

数组指针与指针数组

数组指针:首先是一个指针,一个数组的地址。

  *[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]
 
 
 
 
posted @ 2020-09-22 20:49  Edward_han  阅读(73)  评论(0编辑  收藏  举报