数组做函数参数是值传递
指针数组是引用
p *[5]int
数组是值类型
a := [3]int{1, 2, 3}
b := a
b[0] = 5
//[1 2 3]
//[5 2 3]
fmt.Println(a)
fmt.Println(b)
数组是指一系列同一类型数据的集合,数组中包含的每个数据被称为数组元素,一个数组包含的元素个数被称为数组的长度
数组的长度必须是常量,而且是数组的组成部分, [2]int和[3]int是不同类型
var n int = 10
var a [n]int //error
var b [10]int //ok
基本操作
func main() {
var a [10]int
var b [5]int
fmt.Printf("len(a) = %d, len(b) = %d\n", len(a), len(b))
//赋值
for i := 0; i < len(a); i++ {
a[i] = i+1
}
for i, data := range a {
fmt.Printf("a[%d] = %d\n", i, data)
}
}
一维初始化
func main() {
//声明定义同时赋值,叫初始化
//全部初始化
var a [5]int = [5]int{1, 2, 3, 4, 5}
fmt.Println("a = ", a)
//没有初始化的为0
b := [5]int{1, 2, 3}
fmt.Println("b = ", b)
//指定元素初始化
d := [5]int{2: 10, 4:20}
fmt.Println("d = ", d)
}
输出
a = [1 2 3 4 5]
b = [1 2 3 0 0]
d = [0 0 10 0 20]
二维数组
func main() {
//{}要在同一行
b := [3][4]int{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}
fmt.Println("b = ", b)
//部分初始化
c := [3][4]int{1:{5, 6, 7, 8}, {9, 10, 11}}
fmt.Println("c = ", c)
}
输出
b = [[1 2 3 4] [5 6 7 8] [9 10 11 12]]
c = [[0 0 0 0] [5 6 7 8] [9 10 11 0]]
比较和复制
同类型的两个数组支持"=="和"!="比较,但是不能比较大小
func main() {
//支持比较,只支持 == 或 !=,比较并不是每一个元素都一样,2个数组比较,数组类型要一样
a := [5]int{1, 2, 3, 4, 5}
b := [5]int{1, 2, 3, 4, 5}
c := [5]int{1, 2, 3}
fmt.Println("a == b", a==b)
fmt.Println("a == b", a==c)
//同类型的数组可以赋值
var d [5]int
d = a
fmt.Println("d = ", d)
}
复制
输出
a == b true
a == b false
d = [1 2 3 4 5]
















