数组注意事项和使用细节
- 数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的, 不能动态变化
var arr01 [3]int
arr01[0] = 1
arr01[1] = 30
arr01[2] = 1.1 -- 这里会报错
arr01[3] = 890 -- 其长度是固定的, 不能动态变化,否则报越界
- var arr []int 这时 arr 就是一个 slice 切片
- 数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值(零值)
- 数值类型数组:默认值为 0
- 字符串数组: 默认值为 ""
- bool数组: 默认值为 false
var arr01 [3]float32
var arr02 [3]string
var arr03 [3]bool
fmt.Printf("arr01=%v arr02=%v arr03=%v\n", arr01, arr02, arr03)
- 使用数组的步骤
- 声明数组并开辟空间
- 给数组各个元素赋值(默认零值)
- 使用数组
var arr04 [3]string -- 0 - 2
var index int = 3
arr04[index] = "tom" -- 因为下标是 0 - 2 ,因此arr04[3]就越界
- 数组下标必须在指定范围内使用,否则报 panic:数组越界,比如
- var arr [5]int 则有效下标为 0-4
- Go 的数组属值类型, 在默认情况下是值传递, 因此会进行值拷贝。数组间不会相互影响
func test01(arr [3]int) {
arr[0] = 88
}
func main(){
arr := [3]int{11, 22, 33}
test01(arr)
fmt.Println("main arr=", arr)
}
- 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)
func test02(brr *[3]int) {
(*brr )[0] = 88
}
func main(){
arr := [3]int{11, 22, 33}
test02(&arr)
fmt.Println("main arr=", arr)
}
- 长度是数组类型的一部分,在传递函数参数时 需要考虑数组的长度