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一般不直接使用数组,而是使用切片