GO-數組與切片

一.數組的定義

//var 變量名 [數組的容量]類型 = [數組的容量]類型{值1,值2}
var a [4]int = [4]int{1,2,3}
或者
var a = [4]int{1,2,3}
或者
a := [4]int{1,2,3}
//這幾個的結果爲[1 2 3 0]


//接受長度有賦值的長度決定
package main

import "fmt"

func main(){
    var a  = [...]int{1,2,3}
    //a :=[...]int{1,2,3}
    //可是沒法使用var a [...]int = [...]int{1,2,3}
    //只能var a [3]int = [...]int{1,2,3}
    fmt.Println(a)
}
//結果爲[1 2 3]

二.切片的定義

var a []int = []int{1,2,3}
或者
var a = []int{1,2,3}
或者
a := []int{1,2,3}

三.關於數組與切片之間的轉換以及原理

轉換

//若是有數組a := [4]int{1,2,3,4}

//咱們要取第二個
b :=a[1]

//取第二個和第三個
b :=a[1,3]

//取第二個到最後一個
b :=a[1:]

//此時切片的b的長度由切區數組的個數決定
//此時切片的b的容量由切區數組從切的位置到數組末尾位置

補充數組

  • 長度:len()
  • 容量:cap()

原理

數組變成索引其實切片就至關於建立了一個索引指向數組app

四.關於切片與數組之間發生變化

狀況一:當切片和數組未發生數據增長

切片或者數組裏值發生變化,其對應數組或者切片均會受到影響code

狀況二:當切片發生數據增長(未超過容量)

好比blog

package main
import "fmt"

func main(){
    a := [3]int{1,2,3}
    var b = a[1:2]
    b= append(b,33)
    fmt.Println(a,b)
}
//打印結果[1 2 33] [2 33]
//兩個會相互受影響

狀況三:當切片發生數據增長(超過容量)

package main
import "fmt"

func main(){
    a := [3]int{1,2,3}
    var b = a[1:2]
    b= append(b,33,3)
    fmt.Println(a,b)
}
//打印結果[1 2 3] [2 33 3]
//兩個不會受影響
//其實他底層發生了這樣一件事件
//若是超過定長,底層會從新複製切片那一段數據且容量爲原先的兩倍
//而此時切片b的全部指向的位置也發送改變改變爲新開闢出來的那段數據

五.靈魂畫師畫,狀況三變化過程

相關文章
相關標籤/搜索