go学习笔记array

Array类型数据

数组是值类型,赋值和传参会复制整个数组,而不是指针
数组长度必须是常量,且是类型的组成部分。[2]int和[3]int是不同类型
支持”==”,”!=”操作符,因为内存总是被初始化过
指针数组[n]T,数组指针[n]T

定义数组的方式

直接初始化
package main

import "fmt"

func main() {
    a := [3]int{1,2}    //定义了数组有三个元素,未初始化元素值为0
    fmt.Println(a)      //[1 2 0]
}


package main

import "fmt"

func main() {
    a := [...]int{1, 2, 3, 4, 5}    //通过初始化值确定数组长度
    fmt.Println(a)      //[1 2 3 4 5]
}

package main

import "fmt"

func main() {
    a := [5]int{2:100, 4:200}   //指定了数组对应的键,索引从0开始以0的值进行补齐到指定的数组长度
    fmt.Println(a)      //[0 0 100 0 200]
}
先struct方式定义数组格式,再初始化值
package main

import "fmt"

func main() {
    a := [...]struct{
        name string
        age uint8
    }{
        {"user1", 10},
        {"user2", 20},  //都好不能省略
    }

    fmt.Println(a)      //[{user1 10} {user2 20}]
}
多维数组
package main

import "fmt"

func main() {
    a := [2][3]int{{1,2,3}, {4,5,6}}    //指定每一层的元素个数

    fmt.Println(a)      //[[1 2 3] [4 5 6]]
}


package main

import "fmt"

func main() {
    a := [...][3]int{{1,2,3}, {4,5,6}}  //省略第一维的元素个数,第二维不能省略

    fmt.Println(a)      //[[1 2 3] [4 5 6]]
}
数组会有值拷贝行为,建议使用后slice,或数组指针
package main

import "fmt"

func test(x [2]int) {
    fmt.Printf("x:%p", &x)  //x:0xc42000a2d0    指针位置发生了改变,说明是重新复制了值
    x[1] = 1000
}

func main() {
    a := [2]int{1,2}
    fmt.Printf("a:%p", &a)  //a:0xc42000a2a0
    test(a)
    fmt.Println(a)  //[1 2] 由于是值复制,因此当前的数组还是原来的值
}
数组长度
package main

import "fmt"

func main() {
    a := [2]int{1,2}
    fmt.Println(len(a), cap(a))  //2,2
}
坚持原创技术分享,您的支持将鼓励我继续创作!