Go语言学习笔记-005数组

本文介绍了Go语言中的数组概念,包括数组的声明、初始化、遍历及多维数组的使用。通过实例展示了如何通过初始化列表、指定长度和索引值初始化数组,并探讨了数组作为值类型的特点。此外,还演示了遍历数组的两种方法以及二维数组的定义和操作。

Go语言005数组

Array(数组)

数组是同一种数据类型元素的集合。再Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。

数组定义

var 数组变量名 [元素数量]T

数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。

var a [6]int
var b [8]int

数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是: len-1访问越界(下标在合法范围之外),则出发访问越界,会panic。

数组的初始化

数组的初始化有很多方式。

方法一

初始哈数组时可以使用初始哈列表来设置数组元素的值。

package main

import "fmt"

func main() {
    var testArray [3]int
    var numArray [3]int{3, 2}
    var cityArray [3]string{"重庆", "成都", "西藏"}
    fmt.Println(testArray)
    fmt.Println(numArray)
    fmt.Println(cityArray)
}
方法二

按照上面的方法每次都要确保提供的初始值和数组长度一致,一般情况下我们可以让编译器根据初始值的个数自行推断数组的长度。

package main

import "fmt"

func main() {
    var testArray [3]int
    var numArray [...]int{4, 6, 8}
    var cityArray [...]string{"重庆", "成都", "西藏"}
    fmt.Println(testArray)
    fmt.Println(numArray)
    fmt.Printf("type of numArray: %T \n", numArray)
    fmt.Println(cityArray)
    fmt.Printf("type of cityArray: %T \n", cityArray)
}
方法三

还可以使用指定索引值的方式来初始化数组,例如:

package main

import "fmt"

func main() {
    a := [...]int{1:3, 4:8}
    fmt.Println(a)		// [0,3,0,0,8]
    fmt.Printf("type of a : %T\n", a)
}

数组的遍历

遍历数组有以下两种方法:

package main

import "fmt"

func main() {
    var a = [...]string{"重庆", "成都", "西藏"}
    
    // 方法1:for循环索引遍历
    for i := 0; i < len(a); i++ {
        fmt.Println(a[i])
    }

    // 方法2: for range遍历
    for index, value := range a {
        fmt.Println(index, value)
    }
}

多维数组

二维数组的定义
package main

import "fmt"

func main() {
    a := [3][2]string{
        {"南岸区", "巴南区"},
        {"渝中区", "九龙坡区"},
        {"渝北区", "江北区"}
    }
    for _, v1 := range a {
        for _, v2 := range v1 {
            fmt.Printf("%s \t", v2)
        }
        fmt.Println()
    }
}

数组是值类型

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

package main

import "fmt"

func modifyArray1(x [3]int) {
    x[0] = 100
}

func modifyArray2(x [3][2]int) {
    x[2][0] = 100
}

func main() {
    a := [3]int{90, 87, 65}
    modifyArray1(a)  // 在modify中修改的是a的副本x
    fmt.Println(a)  // [90, 87, 65]
    b := [3][2]int {
        {1,2},
        {3,4},
        {5,6}
    }
    modifyArray2(b)  // 在modify中修改的是b的副本x
    fmt.Println(b)  // [[1 2] [3 4] [5 6]]
}

注意:

[n]*T表示指针数组,*[n]T表示数组指针

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值