数组初始化
a := [...]int{1, 2}
var b [2]int
b = a
fmt.Println(b)
指针数组
c := [...]int{99: 1}
var p *[100]int = &c
c[0] = 100
fmt.Println(p)
数组的比较
a := [2]int{1, 2}
b := [2]int{1, 2}
fmt.Println(a == b)
数组之间不可以做大于小于的比较, 但是可以做 ==
和 !=
的比较(必须长度,类型都相同才行)
new 一个数组:
a := [10]int{}
a[1] = 2
p := new([10]int)
p[1] = 2
fmt.Println(a)
fmt.Println(p)
多维数组:
a := [2][3]int{
{1, 1, 2: 2},
{2, 2, 2}}
fmt.Println(a)
多维数组第一个括号内数字可以省略
a := [...][3]int{
{1, 1, 1},
{2, 2, 2}}
fmt.Println(a)
切片
a := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
fmt.Println(a)
s := a[:5]
fmt.Println(s)
使用 make 初始化 slice:
//make(类型,大小, 容量)
s := make([]int, 3, 10)
fmt.Println(s, len(s), cap(s))
数组和切片的容量:
a := [3]int{1, 2, 3}
b := a[1:]
c := b[1:]
fmt.Println(a, len(a), cap(a))
fmt.Println(b, len(b), cap(b))
fmt.Println(c, len(c), cap(c))
append 导致重新分配空间,reslice的切片和原始切片不在同一地址,修改s1切片不会改变s2切片
a := []int{1, 2, 3, 4, 5}
s1 := a[2:5]
s2 := a[1:3]
fmt.Println(s1, s2)
s2 = append(s2, 6, 7, 8, 9, 0)
s1[0] = 9
fmt.Println(s1, s2)
copy 函数使用
s1 := []int{1, 2, 3, 4, 5, 6}
s2 := []int{7, 8, 9}
copy(s2, s1)
fmt.Println(s2)
输出:
[1 2 3]