Go基礎之數組

Go基礎之數組

Array(數組)

Go語言中,數組從聲明時就肯定,使用時能夠修改數組成員,可是數組大小不可變化數組

var 數組變量名 [元素數量]T
// 定義一個長度爲3元素類型爲int的數組a
var a [3]int
  • 數組的長度必須是常量,而且長度是數組類型的一部分。一旦定義,長度不能變。 [3]int[5]int是不一樣的類型指針

  • 數組能夠經過下標進行訪問,下標是從0開始,最後一個元素下標是:len-1,訪問越界(下標在合法範圍以外),則觸發訪問越界,會panic。code

數組的初始化

方式一

初始化數組時能夠使用初始化列表來設置數組元素的值索引

func main() {
  var Array1 [3]int
  var Array2 = [3]int{1, 2}
  var Array3 = [3]string{"北京", "上海", "廣州"}
  fmt.Println(Array1)
  fmt.Println(Array2)
  fmt.Println(Array3)
}
//[0 0 0]
//[1 2 0]
//[北京 上海 廣州]

方式二

按照上面的方法每次都要確保提供的初始值和數組長度一致,通常狀況下咱們能夠讓編譯器根據初始值的個數自行推斷數組的長度內存

func main() {
  var Array1 [3]int
  var Array2 = [...]int{1, 2}
  var Array3 = [...]string{"北京", "上海", "廣州"}
  fmt.Println(Array1)
  fmt.Println(Array2)
  fmt.Printf("type of Array2: %T\n", Array2)
  fmt.Println(Array3)
  fmt.Printf("type of Array3: %T\n", Array3)
}
//[0 0 0]
//[1 2]
//type of Array2: [2]int
//[北京 上海 廣州]
//type of Array3: [3]string

方式三

使用指定索引值的方式來初始化數組編譯器

func main() {
  a := [...]int{1:1, 3:5}
  fmt.Println(a)
  fmt.Printf("type of a: %T\n", a)
}
//[0 1 0 5]
//type of a: [4]int

數組的遍歷

func main() {
  a := [...]string{"北京", "上海", "廣州"}
  // 方法一:for循環遍歷
  for i := 0; i < len(a); i++ {
    fmt.Println(a[i])
  }
  // 方法二:for range遍歷
  for index, value := range a {
    fmt.Println(index, value)
  }
}
//北京
//上海
//廣州
//0 北京
//1 上海
//2 廣州

多維數組

二維數組

func main() {
    a := [3][2]string{
        {"北京", "上海"},
        {"廣州", "深圳"},
        {"成都", "武漢"},
    }
    for _, value1 := range a {
        for _, value2 := range value1 {
            fmt.Printf("%s  ", value2)
        }
        fmt.Println()
    }
}
//北京  上海  
//廣州  深圳  
//成都  武漢

注意: 多維數組只有第一層能夠使用...來讓編譯器推導數組長度string

//支持的寫法
a := [...][2]string{
    {"北京", "上海"},
    {"廣州", "深圳"},
    {"成都", "重慶"},
}

數組是值類型

數組是值類型,賦值和傳參會複製整個數組。所以改變副本的值,不會改變自己的值for循環

func modifyArray(x [3]int) {
    x[0] = 666
}
func modifyArray2(x [3][2]int) {
    x[2][0] = 777
}
func main() {
    a := [3]int{1, 2, 3}
    b := [3][2]int{
        {1, 1},
        {2, 2},
        {3, 3},
    }
    modifyArray(a) //在modifyArray中修改的是a的副本x
    fmt.Println(a)
    modifyArray2(b) //在modifyArray2中修改的是b的副本x
    fmt.Println(b)
}
//[1 2 3]
//[[1 1] [2 2] [3 3]]

注意編譯

  • 數組是值類型
  • 數組支持 「==「、」!=」 操做符,由於內存老是被初始化過的
  • [n]*T表示指針數組,*[n]T表示數組指針
//指針數組 數組裏面的元素是指針
[5]*int

//數組指針 這是一個指針
*[5]int
相關文章
相關標籤/搜索