数组 array
说明
说明
- 数组是指一系列同一类型数据的集合
- 数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,例如
int
、string
等 - 一个数组包含的元素个数被称为数组的长度
- 数组是一个长度固定的数据类型,数组的长度是类型的一部分,
[5]int
和[10]int
是不同的类型
定义方式
说明
- 数组的长度必须是常量,并且长度是数组的类型的一部分
- 数组一旦定义,长度不可变,元素可变
var 数组名称 [元素数量]类型
-
方式1 指定长度和类型
var arr [5]int // 长度为5的int数组,初始值为[0, 0, 0, 0, 0]
-
方式2 指定长度和类型同时初始化
arr := [5]int{1, 2, 3, 4, 5} // 长度为5,初始值为[1, 2, 3, 4, 5]
-
方式3 使用
...
让编译器自动推断长度arr := [...]int{1, 2, 3} // 自动推断长度为3
代码示例
package main
import "fmt"
func main() {
// 定义一个长度为5,类型为int的空数组
var a [5]int
// 定义一个长度为3,类型为int的数组并赋值
var b [3]int
b[0] = 80
b[1] = 90
b[2] = 100
// 定义一个长度为3,类型为int的数组并赋值
c := [3]int{1, 2, 3}
fmt.Println("a:", a)
fmt.Println("b:", b)
fmt.Println("c:", c)
}
输出
a: [0 0 0 0 0]
b: [80 90 100]
c: [1 2 3]
使用示例
普通遍历数组
package main
import "fmt"
func main() {
var a = [5]string{"北京", "上海", "广州", "深圳", "杭州"}
for i := 0; i < len(a); i++ {
fmt.Println(a[i])
}
}
输出
北京
上海
广州
深圳
杭州
k
,v
遍历数组
package main
import "fmt"
func main() {
var a = [5]string{"北京", "上海", "广州", "深圳", "杭州"}
for index, value := range a {
fmt.Println(index, value)
}
}
输出
0 北京
1 上海
2 广州
3 深圳
4 杭州
数组与切片的区别
特性 | 数组 | 切片 |
---|---|---|
长度是否固定 | 固定 | 可变 |
定义时是否需要长度 | 必须指定长度(或用 ... 推断) | 不需要,直接用 [] 定义 |
是否值类型 | 是(传递时会拷贝整个数组) | 否(传递的是引用) |
初始化方式 | [n]type{...} | []type{...} |
使用 make 创建 | 不支持 | 支持 |
底层结构 | 直接存储元素 | 基于数组,提供灵活操作 |