7.3.1 概述

数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。

数组⻓度必须是常量,且是类型的组成部分。 [2]int 和 [3]int 是不同类型。

  1. var n int = 10
  2. var a [n]int //err, non-constant array bound n
  3. var b [10]int //ok

7.3.2 操作数组

数组的每个元素可以通过索引下标来访问,索引下标的范围是从0开始到数组长度减1的位置。

  1. var a [10]int
  2. for i := 0; i < 10; i++ {
  3. a[i] = i + 1
  4. fmt.Printf("a[%d] = %d\n", i, a[i])
  5. }
  6. //range具有两个返回值,第一个返回值是元素的数组下标,第二个返回值是元素的值
  7. for i, v := range a {
  8. fmt.Println("a[", i, "]=", v)
  9. }

内置函数 len(长度) 和 cap(容量) 都返回数组⻓度 (元素数量):

  1. a := [10]int{}
  2. fmt.Println(len(a), cap(a))//10 10

初始化:

  1. a := [3]int{1, 2} // 未初始化元素值为 0
  2. b := [...]int{1, 2, 3} // 通过初始化值确定数组长度
  3. c := [5]int{2: 100, 4: 200} // 通过索引号初始化元素,未初始化元素值为 0
  4. fmt.Println(a, b, c) //[1 2 0] [1 2 3] [0 0 100 0 200]
  5. //支持多维数组
  6. d := [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
  7. e := [...][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}} //第二维不能写"..."
  8. f := [4][2]int{1: {20, 21}, 3: {40, 41}}
  9. g := [4][2]int{1: {0: 20}, 3: {1: 41}}
  10. fmt.Println(d, e, f, g)

相同类型的数组之间可以使用 == 或 != 进行比较,但不可以使用 < 或 >,也可以相互赋值:

  1. a := [3]int{1, 2, 3}
  2. b := [3]int{1, 2, 3}
  3. c := [3]int{1, 2}
  4. fmt.Println(a == b, b == c) //true false
  5. var d [3]int
  6. d = a
  7. fmt.Println(d) //[1 2 3]

7.3.3 在函数间传递数组

根据内存和性能来看,在函数间传递数组是一个开销很大的操作。在函数之间传递变量时,总是以值的方式传递的。如果这个变量是一个数组,意味着整个数组,不管有多长,都会完整复制,并传递给函数。

  1. func modify(array [5]int) {
  2. array[0] = 10 // 试图修改数组的第一个元素
  3. //In modify(), array values: [10 2 3 4 5]
  4. fmt.Println("In modify(), array values:", array)
  5. }
  6. func main() {
  7. array := [5]int{1, 2, 3, 4, 5} // 定义并初始化一个数组
  8. modify(array) // 传递给一个函数,并试图在函数体内修改这个数组内容
  9. //In main(), array values: [1 2 3 4 5]
  10. fmt.Println("In main(), array values:", array)
  11. }

数组指针做函数参数:

  1. func modify(array *[5]int) {
  2. (*array)[0] = 10
  3. //In modify(), array values: [10 2 3 4 5]
  4. fmt.Println("In modify(), array values:", *array)
  5. }
  6. func main() {
  7. array := [5]int{1, 2, 3, 4, 5} // 定义并初始化一个数组
  8. modify(&array) // 数组指针
  9. //In main(), array values: [10 2 3 4 5]
  10. fmt.Println("In main(), array values:", array)
  11. }
作者:admin  创建时间:2018-06-18 05:20
 更新时间:2018-06-18 05:24
上一篇:
下一篇: