Go数组
数组
-
概念
存储一组相同数据类型的数据的数据结构。
数组一旦定义后,长度不可改变。
-
语法
var 数组名 [长度]数据类型 var a1 [5]int = [5]int{1,2,3} 或 var a1 = [5]int{1,2,3} var a2 [5]int a2[0]=1 var a3 [5]int = [5]int{1:3,4:8}//在指定位置赋值 var a4 = [...]int{1,2,3}//使用类型推断,自动推测数组长度
-
长度与容量
- go语言的内置函数
- 长度 len() 不是数组独有的,array/map/slice/string都可以使用
- 容量 cap()
-
内存分析
-
在内存开辟连续内存空间,数组的地址就是数组首个元素的地址
-
获取数组的内存地址
var a6 [5]int fmt.Printf("%p",&a6)
-
创建过程
- 首先根据变量的类型和数组长度,开辟相应的内存空间,并且内存空间初始化为相应类型的零值
- 数组变量指向内存空间首个元素的地址
-
-
数组的遍历
var a3 = [5]int{1,2} for i,v := range { }
-
数组类型
[size]type
-
值传递
- 理解为存储的数值本身
- 将数据复制一份,赋值给变量,修改变量值不影响原来的数据
- 数组也是值传递
- int,float,bool,string,array
-
引用传递
- 理解为存储的数据内存地址
- 将内存地址赋值一份,赋值给其他变量
- slice,map是引用传递
-
值类型可以用==比较
数组作为值类型,使用==比较时,只要对应下标位上的值相等,数组就相等
-
数组的排序
-
二维数组
var a1 = [3][4]int{{},{},{}} a1 = [3][4]int{{1,2,3},{4,5,6},{7,8,9}} 3个一维数组 每个一维数组长度位4 一层数组中存放了二层数组的地址,如a1[0]存放了a[0][0]的地址 len(a1) 是二维数组中一维数组的个数,也就是一维数组中存储数值的个数 var tva = [2][2]int{[2]int{}, [2]int{}} //遍历二维数组 for _,arr1 := range tva{ for _,arr2 := range arr1 { fmt.Println(arr2) } }