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]
}

 

posted @ 2024-07-08 15:53  JJJhr  阅读(3)  评论(0编辑  收藏  举报