golang 陣列和切片的區別

2021-09-26 23:34:42 字數 1343 閱讀 9557

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

注意:和c中的陣列相比,存在一些不同:

1)陣列是值,將乙個陣列賦值給另乙個陣列,會拷貝所有的元素

2)陣列作為函式引數,收到的是陣列的乙個拷貝,而不是它的指標

3)陣列的大小是型別的一部分,[10]int和[20]int是不一樣的

陣列的初始化:

//方法一

arr1:=[4

]int

//方法二

arr2:=

[...

]int

陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別slices切片(「動態陣列"),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。切片中有兩個概念:一是len長度,二是cap容量,長度是指已經被賦過值的最大下標+1,可通過內建函式len()獲得。容量是指切片目前可容納的最多元素個數,可通過內建函式cap()獲得。切片是引用型別,因此在當傳遞切片時將引用同一指標,修改值將會影響其他的物件。

切片初始化:

//方法一

slice:=

int//方法二

slice:=

make([

]int

,len

,cap

)//方法三(又陣列建立)

arr:=

[...

]int

//陣列

slice:=arr[0:

2]//切片

slice是引用型別,所以當引用改變其中元素的值時,其它的所有引用都會改變該值,例如下面的a和b,如果修改了b中元素的值,那麼a相對應的值也會改變。

package main

import

"fmt"

func

main()

b:=a

b[0]=

100 fmt.

println

("切片"

,a[0])

a1:=

[...

]int

b1:=a1

b1[0]

=100

fmt.

println

("陣列"

,a1[0]

)}

同樣是引用型別的除了切片以外,還包括:chan、map、inte***ce

Golang中陣列和切片的區別

一句話總結 切片的底層是陣列,可以理解為切片是動態陣列,注意兩者初始化和函式引數的區別。陣列需要指定大小,不指定也會根據初始化的自動推算出大小,不可改變 陣列 a int 或 var a int a 3 int 或 var a 3 int 切片 a int 或 var a int a make in...

golang 陣列和切片

陣列和切片的建立func main output 1 0 ps 陣列宣告時,所有元素預設值都是0。一般很少這樣做,盡量自己初始化。func main output panic runtime error index out of range goroutine 1 running main.main...

golang中陣列和切片的區別與聯絡

golang中陣列和切片的區別 切片時指標型別,陣列是值型別 陣列的長度是固定的,而切片不是 切片是動態的陣列 切片比陣列多乙個屬性 容量 cap 切片的底層是陣列 既然乙個是指標型別,乙個是值型別,那麼區別體現在 呢?看下這個例子 numbers int for i,e range numbers...