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表示数组指针

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

被折叠的 条评论
为什么被折叠?



