数组

数组做函数参数是值传递
指针数组是引用

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]