Golang之陣列 切片,有何區別

2021-10-10 22:48:55 字數 1437 閱讀 7833

初始化

var arr1 [4]int                        //陣列會初始化為int型別的零值

var arr2 = [4]int //使用指定的初始值完成初始化

var arr3= [4]string //使用指定的初始值完成初始化

arr4 := [3]int    //指定固定長度,不可修改

arr5 := [...]int //根據初始值的個數自行推斷陣列的長度

arr6 := [...]int // [0 1 0 5] 使用指定索引值的方式來初始化陣列

*注意

陣列是值型別,賦值和傳參會複製整個陣列。因此改變副本的值,不會改變本身的值,陣列支援 「==「、」!=」 操作符,因為記憶體總是被初始化過的

切片(slice):

切片是乙個擁有相同型別元素的可變長度的序列。它是基於陣列型別做的一層封裝,支援自動擴容。

切片是乙個引用型別,內部結構包含位址長度(len)容量(cap)

定義:var name t   //name變數名;t代表元素型別

var a string              //宣告乙個字串切片

var b = int{} //宣告乙個整型切片並初始化

var c = bool //宣告乙個布林切片並初始化

切片的底層就是乙個陣列,所以我們可以基於陣列通過切片表示式得到切片。 切片表示式中的lowhigh表示乙個索引範圍(左包含,右不包含)

完整切片表示式:

a[min:hign:max]   //容量=max-min

完整切片表示式需要滿足的條件:0 <= low <= high <= max <= cap(a)

a := [6]int

t := a[2:4:6]

t2 := a[3:5]

t3 := a[:5]

fmt.println(t, len(t), cap(t)) //[3 4] 2 4

fmt.println(t2, len(t2), cap(t2)) //[4 5] 2 3 容量等於得到的切片的底層陣列的容量

fmt.println(t3, len(t3), cap(t3)) //[1 2 3 4 5] 5 6 容量=cap(a)-min

*注意

切片是引用型別,不支援==,只能跟nil比較

總結:

Golang 之陣列 切片

陣列在使用前必須宣告長度,在golang中,陣列屬於值型別,在函式傳遞中,實際傳遞的是陣列的拷貝並不是陣列指標拷貝 是一種引用型別,它是不定長的,指向底層陣列 slice底層結構 type sliceheader struct 1.如果切片的容量小於1024個元素,那麼擴容的時候slice的cap就...

golang 陣列和切片的區別

陣列是內建 build in 型別,是一組同型別資料的集合,它是值型別,通過從0開始的下標索引訪問元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的引數傳入時將複製乙份陣列而不是引用同一指標。陣列的長度也是其型別的一部分,通過內建函式len array 獲取其長度。注意 和c中的陣列相比,...

golang陣列,切片

陣列 同一種資料型別的固定長度序列 陣列的定義 var a len int 比如 var a 5 int 長度是陣列型別的一部分,因此,var a 5 int 和 var a 10 int 是不同的型別 陣列的初始化 func chushi var age1 5 int var age2 int v...