关于go:Go基础篇之数组

6次阅读

共计 1592 个字符,预计需要花费 4 分钟才能阅读完成。

数组相必大家都很相熟,各大语言也都有数组的身影。Go 语言也提供了数组类型的数据结构。

1. Array(数组)

数组是同一种数据类型的固定长度的元素汇合。在 Go 语言中,数组申明后长度就不能扭转了,能够批改数组的元素,用法:

// eg: 定义一个长度为 10 的 int 数组
var a [10]int

2. 申明数组

Go 语言数组申明时须要指定元素类型及元素的个数,语法格局如下:

var variable_name [SIZE] variable_type

3. 数组初始化

Go 语言中初始化数组有很多形式。

3.1 形式一

咱们也能够通过字面量在申明数组的同时疾速初始化数组:

balance := [5]float32{3.14, 13.0, 33.4, 15.0, 20.0}

3.2 形式二

如果数组长度不确定,能够应用 ... 代替数组的长度,编译器会依据元素个数自行推断数组的长度:

balance := [...]float32{3.14, 13.0, 33.4, 15.0, 20.0}

3.3 形式三

如果设置了数组的长度,咱们还能够通过指定下标来初始化元素:

//  将索引下标为 1 和 3 的元素初始化
balance := [5]float32{1:2.0,3:7.0}

3.4 多维数组

package main

import ("fmt")

var array1 [5][3]int
var array2 [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}}

func main() {arr1 := [2][3]int{{10, 11, 12}, {20, 21, 22}}
    arr2 := [...][2]int{{10, 11}, {20, 21}, {30, 31}}
    fmt.Println(array1, array2)
    fmt.Println(arr1, arr2)
}

留神: Go 语言多维数组中,只有第一层能够用 ... 其余维度不能用 ...

4. 遍历数组 & 取值

Go 语言中,遍历数组有以下两种办法:

func main() {var users = [...]string{"张三", "李四", "王五"}

    // 办法 1:for range 遍历
    for index, item := range users {fmt.Println(index, item)
    }
    
    // 办法 2:for 循环遍历
    for i := 0; i < len(users); i++ {fmt.Println("姓名:", users[i])
    }

}

多维数组遍历

func main() {var f [2][3]int = [...][3]int{{10, 20, 30}, {4, 5, 6}}
    
    for k1, v1 := range f {
        for k2, v2 := range v1 {fmt.Printf("(%d,%d)=%d", k1, k2, v2)
        }
        fmt.Println("-------------")
    }
}

留神: Go 语言中拜访越界,如果下标在数组非法范畴之外,则触发拜访越界,会呈现 panic

5. 数组拷贝和传参

Go 语言中数组是值类型,赋值和传参会复制整个数组。只会扭转复制进去长期数组的值,不会扭转自身。

package main

import "fmt"

func printArr1(arr *[5]int) {
    // 数组指针
    arr[0] = 1000
}

func printArr2(arr [5]int) {arr[0] = 1000
}

func main() {arr1 := [5]int{100, 200, 300, 400, 500}
    printArr1(&arr1)
    fmt.Println(arr1)
    
    arr2 := [...]int{2, 4, 6, 8, 10}
    printArr2(arr2)
    fmt.Println(arr2)
}

控制台输入后果:

[1000 200 300 400 500]
[2 4 6 8 10]

留神:

  • 数组反对“==“、”!=”操作符,因为其内存总是被初始化过的。
  • [n]T 示意指针数组,[n]T 示意数组指针。

好了,就到这,我是程序员祝融,欢送关注、点赞,咱们下期再见!

正文完
 0