Go语言之数组指针和指针数组

2020-06-01  本文已影响0人  测试探索
package main

import "fmt"

func main() {

    /*
    数值指针:首先是一个指针,一个数组的地址。
    *[4]Type
    指针数组:首先是一个输出,存储的数据类型是指针
    [4]*Type
     */
//  1.创建一个普通的数组
    arr1 := [4]int{1,2,3,4}
    fmt.Println(arr1)

//   2.创建一个指针,存储该数组的地址--》数组指针
    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指针自己的地址

//   3.根据数组指针,操作数据
    (*p1)[0] = 100
    fmt.Println(arr1)

    p1[0] = 200 //简化写法
    fmt.Println(arr1)

//    指针数组
    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是:",arr2) //[1 2 3 4]
    fmt.Println("arr3是:",arr3) //[0xc00000a138 0xc00000a140 0xc00000a148 0xc00000a150]

    arr2[0] = 100
    fmt.Println("arr2是:",arr2) //arr2是: [100 2 3 4]
    fmt.Println("a的值是:",a) //a的值是: 1

    *arr3[0] = 100
    fmt.Println("arr3是:",arr3) //arr3是: [0xc00000a138 0xc00000a140 0xc00000a148 0xc00000a150]
    fmt.Println("a的值是:",a) //a的值是: 100

    b = 1000
    fmt.Println("arr2是:",arr2) //[100 2 3 4]
    fmt.Println("arr3的值是:",arr3) //[0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
    for i:=0;i<len(arr3);i++{ //100,1000,3,4
        fmt.Println(*arr3[i])
    }

}
//结果
[1 2 3 4]
&[1 2 3 4]
0xc00011c140
0xc000148020
[100 2 3 4]
[200 2 3 4]
arr2是: [1 2 3 4]
arr3是: [0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
arr2是: [100 2 3 4]
a的值是: 1
arr3是: [0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
a的值是: 100
arr2是: [100 2 3 4]
arr3的值是: [0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
100
1000
3
4
上一篇下一篇

猜你喜欢

热点阅读