[TOC] # 数组 数组做函数参数是值传递 指针数组是引用 ~~~ 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] ~~~ ## 函数传参 值传递