Go语言数组的定义与使用

1、使用var关键字申明,指定数组的长度

package main

import "fmt"

func main() {
   var a [5]int
   fmt.Println(a) //默认是零值[0 0 0 0 0]
   var b [5]string
   fmt.Println(b) //默认是零值[]
   var c [5]bool
   fmt.Println(c) //默认是零值[false false false false false]
   var d [5]float32
   fmt.Println(d) //默认是零值[0 0 0 0 0]
}

2、使用冒号直接赋值

package main

import "fmt"

func main() {
   a := [5]int{1, 2, 3, 4, 5}
   fmt.Println(a)
}

3、让编译器自己推导出数组大小

package main

import "fmt"

func main() {
   b := [...]int{1, 2, 3} //添加...让编译器自动决定数组大小
   fmt.Println(b)
   c := []int{1, 2, 3} //如果不添加...则表示切片,而不是数组了
   fmt.Println(c)
}

4、二维数组

package main

import "fmt"

func main() {
   var a [4][5]int //4行5列的数组
   fmt.Println(a)  //[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]
}

5、数组的遍历

package main

import "fmt"

func main() {
   a := [5]int{2, 4, 6, 8, 10}
   for i := 0; i < len(a); i++ { //使用下标的方式遍历
      fmt.Println(a[i])
   }
   for i := range a { //使用range的方式遍历 一个值表示下标
      fmt.Println(a[i])
   }
   for i, v := range a { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v)
   }
   for _, v := range a { //使用range的方式遍历 不要下标
      fmt.Println(v)
   }
}

6、数组是值类型,意味着数组传递给函数是拷贝

先看一下函数传递的方式

package main

import "fmt"

func show(arr [5]int) {
   for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v)
   }
}
func main() {
   show([5]int{1, 4, 7, 2, 5})
   show([5]int{1, 4, 7})          //不够的默认是零值0
   show([...]int{1, 4, 7, 6, 47}) //使用...必须数组大小为5
}

再看一下值传递

package main

import "fmt"

func show(arr [5]int) {
   for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v) //函数内传入的原始arr
   }
   arr[1] = 10
   arr[2] = 100
   arr[3] = 1000
   arr[4] = 10000
   for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v) //函数内arr已经改变了
   }
}
func main() {
   a := [5]int{1, 2, 3, 4, 5}
   show(a)
   //再看一下原始的a变没变:没变:值传递
   for i, v := range a { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v)
   }
}

7、指针传递数组

package main

import "fmt"

func show(arr *[5]int) {
   for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v) //函数内传入的原始arr
   }
   arr[1] = 10
   arr[2] = 100
   arr[3] = 1000
   arr[4] = 10000
   for i, v := range arr { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v) //函数内arr已经改变了
   }
}
func main() {
   a := [5]int{1, 2, 3, 4, 5}
   show(&a)
   //再看一下原始的a变没变:变了:因为是指针传递
   for i, v := range a { //使用range的方式遍历 两个值表示下标和值
      fmt.Println(i, v)
   }
}

8、写在最后

go一般不直接使用数组,而是使用切片

posted @ 2022-06-12 11:32  南风丶轻语  阅读(107)  评论(0编辑  收藏  举报