数组/切片以及扩容的概念 | Go语言基础

package main // 当前包声明


func main() { // 程序的入口
    // 数组
    //     存储一组相同数据类型的数据结构
    //  连续开辟内存,数组的地址其实是数组的首地址
    //  一旦定义,大小不能改变
    //  创建数组 ==> 访问数组(赋值,取值)
    var arr [4] int
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3
    arr[3] = 4
    fmt.Println(arr)  // 未赋值为默认值

    // 遍历数组
    for i:=0;i<len(arr);i++ // len()获取长度,cap()获取容器存储的最大数量,对于数组len()与cap()相同
        fmt.Println(arr[i])
    }

    // range 取下标与值
    arr := [10]int{1,2,3,4,5,6,7,8,9,10}  // "_"处理不需要的返回值
    for _, v := range arr{
        fmt.Println(v)
    }

    // 数组其他创建方式
    var b = [4] int {1,2,3,4}
    fmt.Println(b)

    // 根据下标:值
    var c = [5] int {1:1, 3:2}
    fmt.Println(c)

    // 用"..." 表示数组长度推断
    //d := [...] string {"1", "2", "3"}
    //fmt.Println(d, "\n", len(d))

    // 值类型:存储的是数值本身; 引用类型:存储数据的内存地址

    // 切片
    //  变长数组(引用类型的容器,指向底层数组),不写长度就是切片
    // 创建切片
    var a []int
    fmt.Println(a)
    var b = [] int {1,2,3}
    fmt.Println(b)
    // make
    a := make([]int,3,8)  // 类型,长度,容量
    fmt.Println(a)

    // 添加元素
    var tempSlice [] int
    tempSlice = append(tempSlice,1,2,3,4,5)
    fmt.Println(tempSlice)
    mySlice := []int{1,2,3}
    tempSlice = append(tempSlice, mySlice...) // 添加切片中的元素`...`
    fmt.Println(tempSlice)

    // 根据数组创建切片,地城数组就是当前的数组
    // 长度是从start到end切割的数据量,但是容量是start到数组的末尾.
    a := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    mySlice := a[0:5] // start:end
    fmt.Printf("%T %v", a, a)
    fmt.Printf("%T %v", mySlice, mySlice)

    // 扩容
    // 当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)
    // 当超过容量,切片指向的就不再原来的数组,而是内存地址中开辟了一个新的数组.
}

猜你喜欢

转载自www.cnblogs.com/pymkl/p/10057566.html