数组指针:

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

*[num]T  // 数组指针
package main

import "fmt"


func main() {
    arr1 := [4]{1,2,3,4}  // 创建一个数组
    
    // 创建一个数组指针
    var p1 *[4]int
    p1 = &arr1
    fmt.Println(p1)  // &[1,2,3,4]
    fmt.Printf("%p\n", p1)  // 数组arr1的地址
    fmt.Printf("%p\n", &p1)  // p1指针自己的地址

    // 通过指针操作数组
    (*p1)[0] = 100
    fmt.Println(arr1)  // [100,2,3,4]
    
    p1[0] = 200  // 简化写法
    fmt.Println(arr1)  // [200,2,3,4]
}

指针数组:

解释:首先是一个数组,存储的数据类型是指针

[num]*T  // 指针数组
package main

import "fmt"

func main() {
    a := 1
    b := 2
    c := 3
    d := 4

    arr2 := [4]int{a,b,c,d}  // 值传递
    arr3 := [4]*int{&a,&b,&c,&d}
    fmt.Println(arr2)  // [1,2,3,4]
    fmt.Println(arr3)  // [0x..33ff3, 0x..33ff4, 0x..33ff5, 0x..33ff6]

    arr2[0] = 100
    fmt.Println(arr2)  // [100,2,3,4]
    fmt.Println(a)  // 1
    *arr3[0] = 200
    fmt.Println(arr3)  // [0x..33ff3, 0x..33ff4, 0x..33ff5, 0x..33ff6]
    fmt.Println(a)  // 200

    b = 1000
    fmt.Println(arr2)  // [100,2,3,4]
    fmt.Println(arr3)  // [0x..33ff3, 0x..33ff4, 0x..33ff5, 0x..33ff6]
    for i:=0;i<len(arr3) ;i++ {
        fmt.Println(*arr3[i])  // 200\n1000\n3\n4
    }
}