go语言开发基础19 - 之go语言里的数组类型
一、说明
- 数组是同一种类型的固定长度的序列
- 数组定义:var a[5]int (定义int类型长度为5的序列,数组定义后长度就不可变)
- 长度是数组的一部分,因此 var a[5]int 和 var a[10]int 是不同的类型
- 数组可以通过下标来进行访问,下标是从0开始,最后一个元素下标是:len-1
- 越界访问,如果下标在数组合法范围之外则会触发越界访问,会panic
- 数组是值类型,因此改变副本的值不会改变本身的值
二、数组定义与初始化方法
2.1、数组定义
var a0 [10]int // 定义一个长度为10的int类型数组 var a1 [5]string // 定义一个长度为5的string类型数组 var a2 [2][3]int // 定义多维数组:表示该数组有2行3列
2.2、数组初始化
var arg [5]int = [5]int{1,2,3,4} // 定义数组时直接初始化,如果初始化的值少时默认以0占位,结果为:[1,2,3,4,0]
var arg1 = [5]int{1,2,3,4,5} // 推导,不写类型时默认会根据值得类型推导,结果为:[1,2,3,4,5]
var arg2 = [...]int{1,2,3,4,5} // 可变长度:根据后面值得长度(如果后面值有五个,数组长度就是五个,六个就是六个),结果为:[1,2,3,4,5]
var str = [5]string{3:"hello world", 4:"tom"} // 指定下标初始化,下标为3得值为:"hello world",下标为4得值为:"tom",没指定下标得就是空值
var age [2][3]int = [...][3]int{{1,2,3},{4,5,6}} // 多维数组初始化:每行用一个大括号表示,每个大括号里三列
三、数组代码示例
3.1、数组定义与循环数组
func numGroup1() {
var a [10]int // 定义数组
a[0] = 100 // 数组赋值操作
a[9] = 200
fmt.Println(a) // 结果为:[100 0 0 0 0 0 0 0 0 200]
// 数组的两种便利方法:
fmt.Println("循环数组,方法一")
for i := 0; i < len(a); i++ {
fmt.Printf("index:%d,value:%d\n", i, a[i])
}
fmt.Println("循环数组,方法二")
for k, r := range a {
fmt.Printf("index:%d,value:%d\n", k, r)
}
}
3.2、数组是值类型,因此改变副本的值不会改变原数组的值
func numGroup2() {
var a [10]int
b := a
b[0] = 300
fmt.Println("a :", a) // 结果为:a : [0 0 0 0 0 0 0 0 0 0]
fmt.Println("b :", b) // 结果为:b : [300 0 0 0 0 0 0 0 0 0]
}
3.3、函数内部修改的值只会作用在函数内部(函数内部如需修改外部数组的值需要接收指针类型,传地址)
func numGroup3(arr *[5]int) {
(*arr)[0] = 1000
}
func main() {
var a[5]int
numGroup3(&a)
fmt.Println(a) // 结果为:[1000 0 0 0 0]
}
3.4、多维数组定义与循环
func numGroup4() {
var a1 [2][5]int = [...][5]int{{1, 2, 3, 4, 5}, {6, 7, 8, 9, 0}} // 定义一个两行五列的数组并赋值,赋值时一个大括号里代表一行,大括号里的每个元素是一列
for row, v := range a1 { // 行的循环
for col, v1 := range v { // 列的循环
fmt.Printf("(行:%d,列:%d)=值:%d,", row, col, v1) // 打印结果
}
fmt.Println()
}
}
// 执行结果为:
(行:0,列:0)=值:1、(行:0,列:1)=值:2、(行:0,列:2)=值:3、(行:0,列:3)=值:4、(行:0,列:4)=值:5、
(行:1,列:0)=值:6、(行:1,列:1)=值:7、(行:1,列:2)=值:8、(行:1,列:3)=值:9、(行:1,列:4)=值:0、
3.5、使用数组实现斐波那契序列
func fab(n int) {
var a []int64
a = make([]int64, n)
a[0] = 1
a[1] = 1
for i := 2; i < len(a); i++ {
a[i] = a[i-1] + a[i-2]
}
for _, v := range a {
fmt.Println(v)
}
}
func main() {
fab(10)
}
// 执行结果为:
1
1
2
3
5
8
13
21
34
55

浙公网安备 33010602011771号