七、1.复合数据类型(数组与多维数组)

1.复合数组类型(数组)

(1)定义
数组是具有相同数据类型的数据项组成的一组长度固定的序列,数据项叫做数组的元素,数组的长度必须是非负整数的常量,长度也是类型的一部分

(2)声明
数组声明需要制定组成元素的类型以及存储元素的数量(长度)。在数组定义后,其长度不可改,数组的每个元素会根据对应类型的零值对进行初始化

(3)字面量
指定数组长度: [length]type{v1,v2,…,vlength}
使用初始化元素数量推导数组长度[…]type{v1,v2,…,vlength}
对指定位置元素进行初始化[length]type{im:vm,…,sin:in}

package main

import "fmt"
func main() {
    //数组定义多少的长度 就会在内存中申请多少,并且用零值赋值
    var (
        nums [10]int
        t1   [5]bool
        t2   [3]string
    )
    fmt.Printf("%T %v\n", nums, nums)
    fmt.Printf("%T %v\n", t1, t1)
    fmt.Printf("%T %q\n", t2, t2)
    //这里%q占位 会让字符串再打印的时候带上""
    //字面量
    nums = [10]int{10, 20, 30}
    fmt.Println(nums)
    //这里重新给num数组赋值 意味着整个数组重新赋值,而不是对数组内单个元素的值做修改,所以得到的结果是 新的数组
    nums = [10]int{5: 20, 8: 30}
    fmt.Println(nums)
    //go可以自动的推导,不指定长度  但是后面{}中的长度要与 前面的数组长度相同
    t2 = [...]string{"a", "a", "a"}
    fmt.Println(t2)
    //简短声明
    t3 := [5]int{10, 20, 30}
    fmt.Println(t3)
    t4 := [...]int{0, 1}
    fmt.Println(t4)
    t5 := [10]int{1: 2, 5: 100}
    fmt.Println(t5)
    //操作
    t6 := [3]int{1, 2, 3}
    t7 := [3]int{2, 3, 4}
    fmt.Println(t6 == t7)
    fmt.Println(t6 != t7)
    fmt.Println(t6[1] == t7[0])
    //获取数组长度
    fmt.Println(len(t6))
    //索引 0 1 2 3 ... len(array) -1
    //通过索引来修改数组某个元素对应的值
    fmt.Println(t7)
    t7[1] = 10000
    fmt.Println(t7)
    //遍历数组
    for i := 0; i < len(t7); i++ {
        fmt.Printf("%v %v\n", i, t7[i])
    }
    for index, value := range t7 {
        fmt.Println(index, value)
    }
    //如果不想要索引 可以用空白标识符来代替
    // var value int //这里声明在for 里面用:=简短声明不报错的原因是 有隐式的一个作用域 所以在for循环中value的简短声明 是一个新的变量
    for _, value := range t7 {
        fmt.Println(value)
    }
    //如果要用简短声明:= 来声明 那么:= 左侧至少有一个新的变量 那么才不会编译的时候报错
    var values int
    _, values, xxx := 1, 2, 1
    fmt.Println(values, xxx)
    //切片   数组[start:end]  end不能超过数组长度
    t8 := [10]int{1, 2, 4, 5, 67, 7}
    fmt.Printf("%T %v\n", t8[0:10], t8[0:10])
    fmt.Printf("%T %v\n", t8[0:10:10], t8[0:10:10])
}

2.复合数组类型(多维数组)

package main

import "fmt"
func main() {
    //多维数组
    var marray [3][2]int
    fmt.Println(marray)
    fmt.Println(marray[1][0])
    marray[0] = [2]int{1, 2}
    fmt.Println(marray)
    marray[1][0] = 2000
    fmt.Println(marray)
    marray = [3][2]int{{1, 2}, {3, 3}}
    fmt.Println(marray)
    //数组的类型必须是一致的
    //多维数组遍历
    for _, v := range marray {
        for _, vv := range v {
            fmt.Printf("%v\t", vv)
        }
        fmt.Println()
    }
}
发布了92 篇原创文章 · 获赞 12 · 访问量 5695

猜你喜欢

转载自blog.csdn.net/weixin_45413603/article/details/104785178