ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 数组声明 ``` // 定义:var 数组变量名 [元素数量]T var a [3]int // 数组名为a,类型为int,长度为3 // 数组的长度是数组的一部分,相同类型、不同长度的数据不是同类型 var a [4]int var b [5]int a = b // 此时是错误的 ``` ## 数组的初始化 ``` var arr1 [3]int var arr2 = [3]int{1, 2} var arr3 = [3]string{"alice", "bob", "cindy"} var arr4 = [...]int{1, 2, 3, 4} //可以省略长度,编译器自行推断元素个数。 arr5 := [...]int{1: 1, 3: 5} //可以指定索引值, 短变量声明。 fmt.Println(arr1) fmt.Println(arr2) fmt.Println(arr3) fmt.Printf("type of arr4: %T",arr4) 输出: [0 0 0] //未指定初始值,则使用该类型的零值 [1 2 0] [alice bob cindy] type of arr4: [4]int [0 1 0 5] ``` ## 数组的遍历 ``` func main() { var arr = [...]string{"alice", "bob", "cindy"} for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } // for range 遍历 for index, value := range arr { fmt.Printf("index: %d + value: %s\n", index, value) } } ``` ## 二维数组 ``` func main() { // 定义3行2列的字符串二维数组 arr := [3][2]string{ {"alice", "bob"}, {"cindy", "dog"}, {"edison", "frank"}, } fmt.Println(arr) //打印第三行第二列 fmt.Println(arr[2][1]) } 输出: [[alice bob] [cindy dog] [edison frank]] frank ``` ## 二维数组的遍历 ``` func main() { arr := [3][2]string{ {"alice", "bob"}, {"cindy", "dog"}, {"edison", "frank"}, } for _, v1 := range arr { for _, v2 := range v1 { fmt.Printf("%s\t", v2) } fmt.Println() } } ``` ``` func main() { arr := [...][2]string{ {"alice", "bob"}, {"cindy", "dog"}, {"edison", "frank"}, } // 不支持多维数组的第二层使用 arr1 := [3][...]string{ {"alice", "bob"}, {"cindy", "dog"}, {"edison", "frank"}, } fmt.Println(arr fmt.Println(arr1) } ``` ## 补充: **数组是值类型** ``` func main() { var arr1 = new([5]int) arr := arr1 arr1[2] = 100 fmt.Println(arr1) fmt.Println(arr) var arr2 [5]int newArr := arr2 arr2[2] = 100 fmt.Println(arr2) fmt.Println(newArr) } ``` ``` 输出: &[0 0 100 0 0] &[0 0 100 0 0] [0 0 100 0 0] [0 0 0 0 0] ``` new(\[5\]int)创建的是数组指针,arr其实和arr1指向同一地址; newarr是由arr2值传递(拷贝)。