数组 Array
数组:是同一种数据类型,组成的固定长度的序列。
定义:var a[len] int,比如:var a[5] int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能改变。
长度是数组类型的一部分,因此 var a[5] int 和 var a[6] int 是不同的类型
数组可以通过下标进行访问,从0开始,最后一位下标 len-1
访问越界,如果下标在数组合法范围之外,则触发访问越界,回panic
数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。
支持 == 和 != 操作符,因为内存总是被初始化过的
指针数组 [n]*T,数组指针 *[n]T
一维数组
package main
import (
"fmt"
)
// 全局变量,必须用var声明,局部变量,可以var,可以:=
// 全局
var arr0 [5]int = [5]int{1,2,3} // [1 2 3 0 0]
var arr1 = [5]int{1,2,3,4,5} // [1 2 3 4 5]
var arr2 = [...]int{1,2,3,4,5,6,7,8} // [1 2 3 4 5 6 7 8]
var str = [5]string{3:"hello",4:"hi"} // [ hello hi]
var arr3 = [...]int{5,1:2,3} // [5 2 3]
// 局部
func main() {
var a = [3]int{1,2} // [1 2 0] 未初始化的元素值是0
b := [...]int{1,2,3,4,5,6,7} // [1 2 3 4 5 6 7] 通过初始化值确定数组的长度
c := [5]int{2:100,4:200} // [0 0 100 0 200] 按照索引,初始化元素
d := [...]struct{ // [{user1 10} {user2 20}]
name string
age uint8
}{
{"user1",10}, // 可省略元素类型
{"user2",20}, // 最后一行,也要添加 ,
}
}
多维数组
package main
import (
"fmt"
)
// 全局变量,必须用var声明,局部变量,可以var,可以:=
// 全局
var arr0 [2][3]int // [[0 0 0] [0 0 0]]
var arr1 [2][3]int = [...][3]int{{1,1,1},{2,2,2}} // [[1 1 1] [2 2 2]] 第二维度,不能用...
// 局部
func main() {
var a = [2][3]int{{1,2,3},{4,5,6}} // [[1 2 3] [4 5 6]]
b := [...][2]int{{1,1},{2,2},{3,3}} // [[1 1] [2 2] [3 3]]
}
内置函数 len和cap,都能返回 数组的长度
package main
import "fmt"
func main() {
var a = [2][3]int{{1,2,3},{4,5,6}}
fmt.Println(len(a))
fmt.Println(cap(a))
}
多维数组遍历
package main
import "fmt"
func main() {
var f [2][3]int = [...][3]int{{1,2,3},{7,8,9}}
for k1,v1 := range f {
for k2,v2 := range v1 {
fmt.Printf("(%d,%d)=%d",k1,k2,v2)
}
fmt.Println()
}
}
// (0,0)=1(0,1)=2(0,2)=3
// (1,0)=7(1,1)=8(1,2)=9
数组拷贝和传参
package main
import "fmt"
func printArr(arr *[5]int) {
arr[0] = 10
for i, v := range arr {
fmt.Println(i, v)
}
}
func main() {
var arr1 [5]int
printArr(&arr1)
fmt.Println(arr1)
arr2 := [...]int{2, 4, 6, 8, 10}
printArr(&arr2)
fmt.Println(arr2)
}
// 0 10
// 1 0
// 2 0
// 3 0
// 4 0
// [10 0 0 0 0] &arr1,指针,arr1被更改
// 0 10
// 1 4
// 2 6
// 3 8
// 4 10
// [10 4 6 8 10]
浙公网安备 33010602011771号