Go中的数组
概念
数组是用来存储集合的数据。除了数组还有切片, map映射等, 但数组是他们的基础。
内部实现
- 数组是长度固定的数据类型
- 数组必须存储类型相同并且连续的元素
- 可以通过索引获得数组中的任意数据
- 因为数据元素类型相同, 也可以通过反射, 获取类型占用大小, 进行移位, 获取相应元素
声明和初始化
声明特点
- 指定存储数据的类型
- 指定存储数据的数量
- 数组一旦声明之后, 元素类型和大小都不能发生改变; 如果要改变数组结构只能创建新数组, 将原数组复制进去
初始化
-
用零值初始化数组, 用值再次初始化
var array [5]int array = [5]int{1, 2, 3, 4, 5} -
使用
:=符号进行初始化array := [5]int{1, 2, 3, 4, 5} -
使用
...符号初始化数组array := [...]int{1, 2, 3, 4, 5} -
数组部分初始化
array := [...]int{0 ,1, 0, 4, 0} array := [...]int{1: 1, 3: 4}
使用数组
访问数组
使用索引进行数组数据访问
array:=[5]int{1:1,3:4}
fmt.Printf("%d",array[1])
修改数组
使用索引修改数组
array:=[5]int{1:1,3:4}
fmt.Printf("%d\n",array[1])
array[1] = 3
fmt.Printf("%d\n",array[1])
获得数组中的所有值
-
for循环
array := [5]int{1: 1, 3: 4} for i := 0; i < 5; i++ { fmt.Printf("索引:%d,值:%d\n", i, array[i]) } -
for range 循环
func main() { array := [5]int{1: 1, 3: 4} for i, v := range array { fmt.Printf("索引:%d,值:%d\n", i, v) }
相同类型数组赋值
-
相同数组
- 数组长度一致
- 数组中每个元素类型必须一致
-
赋值过程
array := [5]int{1, 2, 3, 4, 5} var array1 [5]int = array // success var array2 [4]int = array // error
指针数组
- 元素类型为指针的数组
- 只能给分配内存的索引赋值, 未分配的索引是无效的
- 创建过程
array := [5]*int{1: new(int), 3:new(int)} *array[1] = 1
注意点
- 数组指针和指针数组是两个概念
- 数组指针
*[5]int - 指针数组
[5]*int