持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
一、注意事项和细节
- 数组是多个相同类型数据的组合,,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。详见细节一(2.1)
- var arr [int] 这时arr就是一个slice切片
- 数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值。详见细节二(2.2)
- 数值类型数组:默认值为0
- 字符串数组: 默认值为 ""
- bool数组: 默认值为false
- 使用数组的步骤
-
- 声明数组并开辟空间
-
- 给数组各个元素赋值3使用数组
- 数组的下标是从0开始的。
- 数组下标必须在指定范围内使用,否则报panic: 数组越界,比如var arr [5]int则有效下标为0-4
- Go的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响
- 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式) 。详见细节三(2.3)
长度是数组类型的一部分,在传递函数参数时,需要考虑数组长度,不同数组长度不能传递。详见细节四(2.4)
二、案例演示
2.1 细节一
package main
import "fmt"
func main() {
// 数组是多个相同数据类型的组合,一个数组一旦声明,其长度是固定的,无法动态变化
var arr01 [3]int
arr01[0] = 1
// arr01[1] = 2.2 //会报错,类型不符
arr01[2] = 3
// arr01[3] = 4 // 报错,越界
// arr01 = [1 0 3]
fmt.Println("arr01 = ", arr01)
}
2.2 细节二
package main
import "fmt"
func main() {
// 数组类型默认值
// 数值类型 0
// 字符串类型 ""
// bool类型 false
arr01 := [3]float32{}
arr02 := [3]string{}
arr03 := [3]bool{}
// 数值型数组 = [0 0 0]
// 字符型数组 = [ ]
// 布尔型数组 = [false false false]
fmt.Println("数值型数组 = ", arr01)
fmt.Println("字符型数组 = ", arr02)
fmt.Println("布尔型数组 = ", arr03)
}
2.3 细节三
package main
import "fmt"
// 定义函数
func testArr(arr *[3]int) {
(*arr)[0] = 100
}
func main() {
// 引用传递
arr := [3]int{11, 22, 33}
testArr(&arr)
// main arr = [100 22 33]
fmt.Println("main arr = ", arr)
}
2.4 细节四
2.4.1 错误一
package main
import "fmt"
func arrfc(arr []int) {
arr[0] = 100
fmt.Println("arr函数中的 arr = ", arr)
}
func main() {
arr := [...]int{1, 2, 3}
// 报错
// .\main.go:12:8: cannot use arr (variable of type [3]int) as type []int in argument to arrfc
// mian中的arr是 [3]int类型的,不能将其传递给 arrfc []int
arrfc(arr)
}
2.4.2 正确案例
package main
import "fmt"
func arrfc(arr [3]int) {
arr[0] = 100
fmt.Println("arr函数中的 arr = ", arr)
}
func main() {
arr := [...]int{1, 2, 3}
// arr函数中的 arr = [100 2 3]
arrfc(arr)
}