package main import "fmt" func main(){ //数组声明 var arr [5]int arr[0] = 2 //类型为int,未初始化的就是0 fmt.Println(arr)//[2 0 0 0 0] //使用数组字面量声明数组 arr1 := [5]int{1,2,3,4,5} fmt.Println(arr1) //[1 2 3 4 5] //让go自己计算数组的长度, arr2 := [...]int{1,2,3} fmt.Println(arr2) //[1 2 3] //访问指针数组的元素, arr3 := [5]*int{0:new(int),1:new(int)} //初始化值,数组里存的是指向整型的地址,未初始化的为nil *arr3[0] = 10 fmt.Println(arr3) //[0xc00000a100 0xc00000a108 <nil> <nil> <nil>] //同类型数组赋值,不同类型的数组不能相互赋值,指针数组赋值是复制地址,两个数组指向同一组数据 arr4 := [5]int{1,2,3} var arr5 [5]int arr5 = arr4 fmt.Println(arr5)//[1 2 3 0 0] //声明二维数组 var at [4][2]int fmt.Println(at) //[[0 0] [0 0] [0 0] [0 0]] //使用数组字面量声明 at1 := [4][2]int{{1,2},{2,3}} fmt.Println(at1) //[[1 2] [2 3] [0 0] [0 0]] //声明并初始化外层索引为1和3 的元素 at2 :=[4][2]int{1:{1,2},3:{1,2}} fmt.Println(at2) //[[0 0] [1 2] [0 0] [1 2]] //声明并初始化外层数组和内层数组的单个元素 at3 := [4][2]int{1:{1:2},3:{1:1}} fmt.Println(at3) //[[0 0] [0 2] [0 0] [0 1]] //同类型的数组可以相互复制,因为每个数组是一个值,可以独立复制一个维度 //将art1维度为的数组赋值给atr2数组 atr1 := [4][2]int{{1,2},{4,4}} var atr2 [2]int atr2 = atr1[1] fmt.Println(atr2) //[4 4] //遍历数组 //1、用for遍历 array := [13]int{1,2,3,4} for i:=0; i<len(array); i++{ fmt.Println(array[i]) } //2、用range遍历 for key,value := range array { fmt.Printf("索引是%v,值是%v\n",key,value) } //用数组做函数参数时, // 值传递时不改变原有数组的值,相当于拷贝了一个新的值,但是在传递较大的数组时会消耗很长时间 test1(array) fmt.Println(array) //[1 2 3 4 0 0 0 0 0 0 0 0 0] //将数组的地址传给函数,会改变原数组的值 test2(&array) fmt.Println(array) //[1 2 3 9 0 0 0 0 0 0 0 0 0] } func test1(array [13]int ){ array[3] = 9 fmt.Println(array) //[1 2 3 9 0 0 0 0 0 0 0 0 0] } func test2(array *[13]int){ array[3] = 9 fmt.Println(array) //&[1 2 3 9 0 0 0 0 0 0 0 0 0] fmt.Println(*array) //[1 2 3 9 0 0 0 0 0 0 0 0 0] fmt.Println(&array) //0xc000006030 fmt.Println(array[3]) //9 }
GO语言 数组的知识
最新推荐文章于 2024-06-23 12:32:09 发布