Go-数组

本文深入解析Go语言中的数组概念,包括不同类型的数组初始化方式,数组的长度特性,以及如何通过值传递和指针来高效地操作数组。同时,文章探讨了数组的遍历方法和在函数间传递数组的有效途径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组初始化

var a [3]int //3个整数数组,初始化值0,0,0

[5] int {1,2,3,4,5} //长度为5的数组,其元素值依次为:1,2,3,4,5

[5] int {1,2} //长度为5的数组,其元素值依次为:1,2,0,0,0 。在初始化时没有指定初值的元素将会赋值为其元素类型int的默认值0,string的默认值是""

[...] int {1,2,3,4,5} //长度为5的数组,其长度是根据初始化时指定的元素个数决定的

[5] int { 2:1,3:2,4:3} //长度为5的数组,key:value,其元素值依次为:0,0,1,2,3。在初始化时指定了2,3,4索引中对应的值:1,2,3

[...] int {2:1,4:3} //长度为5的数组,起元素值依次为:0,0,1,0,3。由于指定了最大索引4对应的值3,根据初始化的元素个数确定其长度为5

数组的长度是数组的一部分,所以 [3]int 和 [5]int是两个不同的数组类型。

数组的长度必须是常量表达式, 这个值是在编译时确定的。

q := [3]int{1,2,3}

q = [4]int{1,2,3,4} //编译错误,q现在是[3]int, 和 [4]int是不同的类型

如果一个数组的元素是可比较的,那这个数组也是可比较的,用 == 操作符比较两个数组,比较的是元素值是否完全相同。

 

Go把数组和其它的类型都看成是值传递,其它语言中,数组是隐式使用引用。

也可以显示地传递一个数组的指针给函数,这样在函数内部对数组的修改会反映到原始数组。

func zero (ptr *[3]byte){

    for i := range ptr{

        ptr[i] = 0

    }

}


func zero (ptr *[32]byte){

    *ptr = [32]byte{}

}

使用数组指针是高效的,同时允许被调函数修改调用方数组中的元素,但由于数组的长度不可变,除特殊情况,我们很少使用数组。

遍历

attr1 := [3]string{}
arr2 := [4]string{"a", "b", "c", "d"}

for i := 0; i < len(arr2); i++ {
    fmt.Print(arr4[i], "\t")
}



for _, value := range arr1 {
    fmt.Print(value, "\t")
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值