01.数组
在 Go 语言中,数组是一种固定长度的序列,它可以存储相同类型的元素。下面详细介绍数组的定义、初始化、访问和操作。
数组的定义
数组的定义语法为:[n]T
,其中 n
表示数组的长度,T
表示数组元素的类型。
package main import "fmt" func main() { // 定义一个长度为 5 的整数数组 var arr [5]int fmt.Println(arr) // 输出:[0 0 0 0 0] // 定义一个长度为 3 的字符串数组 var strArr [3]string fmt.Println(strArr) // 输出:[ ] }
数组的访问
数组元素的访问通过索引进行,索引从 0 开始。
package main import "fmt" func main() { arr := [5]int{10, 20, 30, 40, 50} // 访问数组元素 fmt.Println(arr[0]) // 输出:10 fmt.Println(arr[4]) // 输出:50 // 修改数组元素 arr[2] = 100 fmt.Println(arr) // 输出:[10 20 100 40 50] // 获取数组长度 fmt.Println(len(arr)) // 输出:5 }
数组的遍历
可以使用 for
循环或 range
关键字遍历数组。
package main import "fmt" func main() { arr := [5]int{10, 20, 30, 40, 50} // 使用传统的 for 循环遍历数组 for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } // 使用 range 关键字遍历数组 for index, value := range arr { fmt.Printf("Index: %d, Value: %d\n", index, value) } }
数组的多维数组
Go 语言支持多维数组(如二维数组)。
package main import "fmt" func main() { // 定义一个 2x3 的二维数组 var matrix [2][3]int // 初始化二维数组 matrix = [2][3]int{ {1, 2, 3}, {4, 5, 6}, } fmt.Println(matrix) // 输出:[[1 2 3] [4 5 6]] // 访问二维数组元素 fmt.Println(matrix[0][1]) // 输出:2 // 遍历二维数组 for i := 0; i < len(matrix); i++ { for j := 0; j < len(matrix[i]); j++ { fmt.Printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]) } } }
综合示例
下面的代码展示了数组的定义、初始化、访问和操作。
package main import "fmt" func main() { // 定义和初始化数组 var numbers [5]int numbers = [5]int{1, 2, 3, 4, 5} // 访问数组元素 fmt.Println("Array:", numbers) fmt.Println("Element at index 2:", numbers[2]) // 修改数组元素 numbers[2] = 100 fmt.Println("Modified Array:", numbers) // 数组长度 fmt.Println("Length of array:", len(numbers)) // 遍历数组 fmt.Println("Array elements:") for i := 0; i < len(numbers); i++ { fmt.Println(numbers[i]) } // 使用 range 遍历数组 fmt.Println("Array elements with range:") for index, value := range numbers { fmt.Printf("Index: %d, Value: %d\n", index, value) } // 多维数组 var matrix [2][3]int matrix = [2][3]int{ {1, 2, 3}, {4, 5, 6}, } fmt.Println("2D Array:", matrix) // 遍历多维数组 fmt.Println("2D Array elements:") for i := 0; i < len(matrix); i++ { for j := 0; j < len(matrix[i]); j++ { fmt.Printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]) } } }
注意:
数组是值类型
[10]int 和 [20]int 是不同类型
调用 func f(srr [10]int) 会拷贝数组
数组是值类型,赋值或传递数组时,会创建数组的副本,而不是引用。如果需要传递大型数组或需要引用传递,应该使用指针或切片。
package main
import "fmt"
func main() {
arr1 := [5]int{1, 2, 3, 4, 5}
arr2 := arr1 // 创建 arr1 的副本
arr2[0] = 100
fmt.Println("arr1:", arr1) // 输出:[1 2 3 4 5]
fmt.Println("arr2:", arr2) // 输出:[100 2 3 4 5]
}