Golang|GO语言-数组Array

前言 数组:存储相同数据类型的数据结构
数组是定长的,定义了多大就是多大。操作数组中的数据,可以通过索引来操作。

创建数组语法 数组

var array_name [size]array_type var array_name = [size]array_type var array_name = [size]array_type{v1, v2, v3, v4}//如果值比size小,int类型用0填充,string类型用空字符串填充。 var array_name = [size]array_type{index1: v1, index3 : v3} //size写成... 就会在赋值完成后自动计算数组长度 array_name := [...]array_type{v1, v2, v3, v4} array_name := [...]array_type{index1: v1, index3 : v3}


多维数组 一维数组:存储数据本身
a1 := [3]int{1,2,3}
二维数组:数组中存储的也是数组
a2 := [3][4]int{{}, {}, {}}
容量3是指二位数组的容量,存储了3个一维数组;容量4是指一维数组的容量。
func main() { arr := [3][4]int{{}, {1, 2, 3, 4}, {}} fmt.Println(arr) }//输出:[[0 0 0 0] [1 2 3 4] [0 0 0 0]]


访问数组 数组 使用数组的索引(下标)即可访问数组。
func main() { array_test := []int{1, 2, 3, 4} fmt.Println(array_test[0], array_test[3]) }


获取数组的长度和容量:len()获取长度、cap()获取容量,数组的长度和容量是相等的。

遍历二维数组
func main() { arr := [2][4]int{{}, {1, 2, 3, 4}} fmt.Println("---数组arr---: \n", arr) //for循环 fmt.Println("\n---for循环遍历数组arr---:") for i := 0; i < len(arr); i++ { for j := 0; j < len(arr[i]); j++ { fmt.Printf("%d ", arr[i][j]) } } //for range fmt.Println("\n---for range遍历数组arr---:") for _, arr1val := range arr { for _, arr2val := range arr1val { fmt.Printf("%d ", arr2val) } } }

Golang|GO语言-数组Array
文章图片


数组的数据类型 值类型/引用类型
数组是值类型。赋值的时候,是将原来的值复制一份给新的值。操作新的值对原本数值没有影响。
数值类型:int float bool string array

引用类型:slice map...
【Golang|GO语言-数组Array】引用类型赋值的时候,新的值是直接操作原来值的内存地址。

Array内存分析 数组存储相同类型的数据,会开辟一个连续的内存。go语言的内存是系统自动分配的,当数组不用的时候,就会由GC垃圾回收机制从内存中回收。
数组的地址,其实就是数组第一个元素的地址。因为数组中的元素类型一样,占用内存大小一样。所以就很容易寻址。
func main() { array_test := [4]int{1, 2, 3, 4} fmt.Printf("%p--数组内存地址\n", &array_test) fmt.Printf("%p--数组中第1个元素内存地址\n", &array_test[0]) fmt.Printf("%p--数组中第2个元素内存地址\n", &array_test[1]) }

Golang|GO语言-数组Array
文章图片


    推荐阅读