go 声明二维数组_Go 语言学习之数组

本文介绍了Go语言中的数组概念,强调了数组长度是类型的一部分。详细讲解了如何声明和初始化数组,包括指定索引位置、使用省略号简化初始化。接着讨论了多维数组的声明,特别指出第一维度可以使用省略号。文章还涉及了数组的比较原则,即长度相同且所有元素相等时才相等。此外,展示了如何遍历数组,包括使用for循环和for...range。最后,探讨了指针数组、数组指针的使用以及Go语言中数组按值传递的特点。
摘要由CSDN通过智能技术生成

a673d9d13c8e6a40e5065e6ff044447a.png

01

概念

数组是具有固定长度,并且有零个或多个相同数据类型元素的序列,数组长度是数组类型的一部分,也就是说 [3]int 和 [4]int 是两个不同类型的数组,二者不可以比较,数组通过索引访问元素,Go 语言内置函数 len 可以返回数组的长度,在 Go 语言中,数组是值传递。

02

声明数组和初始化

在 Go 语言中,声明数组需要显式指定数组名称、数组长度和数组类型,默认情况下,未显示初始化一个新声明数组中的元素,数组初始值为元素类型的零值。在声明数组时,可以显式初始化数组的元素,并且可以指定索引位置和定义索引位置别名。其中,指定索引位置初始化数组元素,数组的长度为最大的索引位置数值加 1。通过代码,我们演示声明一个新数组的几种方式。

  • 声明数组,未初始化

    func main() {  var arr [3]int  fmt.Println("arr 数组的第一个元素是:", arr[0])  fmt.Println("arr:", arr)}
  • 初始化数组元素

    var arr2 = [4]int{1, 2, 3, 4}fmt.Println("arr2:", arr2)
  • 初始化数组元素,数组长度使用省略号

    var arr3 = [...]int{1, 2, 3, 4, 5}fmt.Println("arr3 的长度:", len(arr3))

    初始化数组元素,数组长度使用省略号,数组的长度由初始化数组的元素个数决定。

  • 定义索引位置别名初始化数组元素

    const (  name int = iota  email)var arr4 = [...]string{name: "lucy", email: "lucy@gmail.com"}fmt.Println(name, arr4[name])fmt.Println("arr4:", arr4[0])
  • 指定索引位置初始化数组元素

    var arr5 = [...]int{99: 100}fmt.Println(arr5[0], arr5[1], arr5[99])

    初始化数组元素,指定索引位置,数组的长度为最大索引数值加 1。

  • 声明多维数组

    var arrS = [2][3]int{{1, 2, 3}, {10, 20, 30}}fmt.Println("二维数组 arrS:", arrS)var arrS2 = [...][2][3]int{  {    {1, 2, 3},    {4, 5, 6},  },  {    {11, 12, 13},    {14, 15, 16},  },}fmt.Println("arrS2:", arrS2

        声明多维数组,仅第一维度允许使用省略号。

03

数组比较

在 Go 语言中,数组支持比较,需要注意的是,数组的长度是数组类型的一部分,也就是说 [3]int 和 [4]int 是两个不同的数据类型,不可以比较。在数组类型一致的前提下,数组之间才可以比较,并且只有数组的所有元素值全部相等,数组才相等。通过代码,我们演示数组比较的用法。

var arr6 = [5]int{1, 2, 3, 4, 5}var arr7 = [...]int{1, 2, 3, 4, 5}var arr8 = [5]int{2, 3, 4, 5, 6}if arr6 == arr7 {  fmt.Println("arr6 与 arr7 相等")} else if arr6 == arr8 {  fmt.Println("arr6 与 arr8 相等")}

04

数组遍历

在 Go 语言中,除了使用 for 语句通过循环访问数组的索引,遍历数组元素之外,还可以使用 for...range 遍历数组,并且可以使用 “_” 忽略数组的索引。通过代码,我们演示使用 for...range 遍历数组。

var arr6 = [5]int{1, 2, 3, 4, 5}for index, value := range arr6 {  fmt.Printf("arr6[%d]=%d\n", index, value)}for _, value := range arr6 {  fmt.Println("arr6=", value)}

05

指针数组和数组指针

在 Go 语言中,指针数组是指数组的元素为指针类型的值,数组指针是指数组的内存地址。数组指针可以直接用来操作元素。通过代码,我们演示指针数组和数组指针的用法。

x, y := 1, 2a := [2]*int{&x, &y}p := &afmt.Println("数组的元素为指针类型的指针数组:", a)fmt.Println("存储数组的内存地址的数组指针:", p)

06

数组是值传递

在 Go 语言中,数组是值传递,赋值和传参都会创建一个数组的副本,声明一个新数组,使用原数组赋值给新数组,修改原数组,新数组的元素值不改变,通过代码,我们演示数组是值传递。

var arr9 = [3]int{1, 2, 3}var arr10 [3]intarr10 = arr9fmt.Println("arr9:", arr9)fmt.Println("arr10:", arr10)arr9[0] = 10fmt.Println("arr9:", arr9)fmt.Println("arr10:", arr10)

e6ff79e1d19757acdc1d077268817759.png

完整代码:

b3b5b79169bd4c4813f5d2a5032dd061.png

输出结果:

arr 数组的第一个元素是:0arr: [0 0 0]arr2: [1 2 3 4]arr3 的长度:50 lucyarr4: lucy0 0 100二维数组 arrS: [[1 2 3] [10 20 30]]arrS2: [[[1 2 3] [4 5 6]] [[11 12 13] [14 15 16]]]arr6 与 arr7 相等arr6[0]=1arr6[1]=2arr6[2]=3arr6[3]=4arr6[4]=5arr6= 1arr6= 2arr6= 3arr6= 4arr6= 5数组的元素为指针类型的指针数组:[0xc0000b4080 0xc0000b4088]存储数组的内存地址的数组指针:&[0xc0000b4080 0xc0000b4088]arr9: [1 2 3]arr10: [1 2 3]arr9: [10 2 3]arr10: [1 2 3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值