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()
}
}