数组

  • [10]int 和[20]int 是不同类型
  • 调用 func f(arr [10]int) 会 拷贝 数组(可以用指针解决 用*和& (对比切片来说有些麻烦))
  • 在go语言中一般不直接使用数组(通常使用切片)

定义一维数组

func main() {
//定义一个全为0的数组 不可定义初始值
    var arr1 [5]int
//不可省略定义初始值
    arr2 := [3]int{1,3,5}
//省略定义多少个
    arr3 = [...]int{2,4,6,8,10}

    fmt.Println(arr1, arr2, arr3)

}

输出:
    [0 0 0 0 0] [1 3 5] [2 4 6 8 10]

定义二维数组

func main() {
//定义一个四行五列的二维数组 不可定义初始值
    var grid[4][5]int
//定义一个两行三列的二维数组 不可省略定义初始值
    arr2 := [2][3]int{{1,3,5},{2,4,6}}
//省略定义多少行
    arr3 := [...][3]int{{6,3,5},{9,4,6},{8,5,7}}

    fmt.Println(grid, arr2, arr3)

}

    输出:
        [
        [0 0 0 0 0]
        [0 0 0 0 0]
        [0 0 0 0 0]
        [0 0 0 0 0]
        ]

        [
        [1,3,5]
        [2,4,6]
        ]

        [
        [6,3,5]
        [9,4,6]
        [8,5,7]
        ]

循环遍历数组

-----------------------------------------------1-----------------------------------------------
func main() {

arr3 := [...]int{2,4,6,8,10}

for i := 0; i < len(arr3); i++{
        fmt.Println(arr3[i])
}

}

输出:
2
4
6
8
10

-----------------------------------------------2-----------------------------------------------
func main() {

arr3 := [...]int{2,4,6,8,10}

for i := range arr3{
        fmt.Println(arr3[i])
}
}

输出:
2
4
6
8
10

-----------------------------------------------3-----------------------------------------------
func main() {

arr3 := [...]int{2,4,6,8,10}

// i为数组下标 v为数组的值 只要一个i或v可以用_替换(_省略变量)
for i, v := range arr3{
        fmt.Println(i, v)
}
}

输出:
0 2
1 4
2 6
3 8
4 10

数组是值类型

-----------------------------------------------1-----------------------------------------------
func printlnArray(arr [5]int) {
    for i, v := range arr {
        fmt.Println(i, v)
}
}
func main() {
    var arr1 [5]int
    // arr2不可使用printlnArray
    // printlnArray需要5个int而arr2只有3个int
    arr2 := [3]int{1,3,5}
    arr3 = [...]int{2,4,6,8,10}

    printArray(arr1)
    printArray(arr3)
}   
    输出:
    0 0
    1 0
    2 0
    3 0
    4 0

    0 2
    1 4
    2 6
    3 8
    4 10

-----------------------------------------------2----------------------------------------------- 
func printlnArray(arr [5]int) {
    for i, v := range arr {
        fmt.Println(i, v)
}
//因为是值类型 所以该修改无效
 arr[0] = 100
}
func main() {
    var arr1 [5]int
    // arr2不可使用printlnArray
    // printlnArray需要5个int而arr2只有3个int
    arr2 := [3]int{1,3,5}
    arr3 = [...]int{2,4,6,8,10}

        printArray(arr1)
fmt.println(arr1,arr3)
}   
    输出:
    0 0
    1 0
    2 0
    3 0
    4 0
    //因为是值类型 所以修改无效
[0 0 0 0 0] [2 4 6 8 10]
}

-----------------------------------------------3-----------------------------------------------
//  arr[0] = 100放到前面
func printlnArray(arr [5]int) {
//因为是值类型 所以该修改只修改内部
 arr[0] = 100
    for i, v := range arr {
        fmt.Println(i, v)
}
}
func main() {
    var arr1 [5]int
    // arr2不可使用printlnArray
    // printlnArray需要5个int而arr2只有3个int
    arr2 := [3]int{1,3,5}
    arr3 = [...]int{2,4,6,8,10}

        printArray(arr1)
fmt.println(arr1,arr3)
}   
    输出:
    //此处被修改了
    0 100
    1 0
    2 0
    3 0
    4 0
    //因为是值类型 所以此处修改无效
[0 0 0 0 0] [2 4 6 8 10]