GO语言 数组的知识

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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值