Go容器 陣列 array

2021-10-24 11:41:35 字數 2472 閱讀 5051

變數在一定程度上能滿足函式及**的要求。如果編寫一些複雜演算法、資料結構和邏輯,就需要更複雜的型別來實現。這類複雜型別一般情況下具有各種形式的儲存和處理資料的功能,將它們稱為「容器」。

陣列是一段固定長度的連續記憶體空間,由若干相同資料型別的元素組成的序列。

在go語言中,陣列的大小在宣告時就固定下來,使用時可以修改陣列的元素,但是陣列大小不可變化。

go語言陣列宣告格式如下:

var 陣列名 [陣列長度]t

//示例

var arr [3]int //宣告乙個有3個整型的陣列,陣列元素預設值為0

《說明》 預設情況下,乙個新陣列中的元素初始值為元素型別的零值。對於數字型別來說,就是0。 陣列的索引下標是從0開始的。

陣列可以在宣告的同時進行初始化設定。示例**如下:

var team [3]string =
這個確定陣列大小的過程也可以交給編譯器去做,讓編譯器在編譯時,根據元素個數確定陣列的大小。

var team = [...]

//或者使用短變數宣告寫法

team := [...]

《說明》 [...] 表示讓編譯器確定陣列的大小。上面的例子中,編譯器會自動為這個陣列設定陣列大小為3。

需要注意的是,陣列長度是陣列型別的一部分,所以 [3]int 和 [4]int 是兩種不同型別的陣列。陣列的長度必須是常量表示式,也就是說,這個表示式的值在程式編譯期間就可以確定。

q := [3]int

q = [4]int //編譯錯誤:不可以將 [4]int 賦值給 [3]int

go語言的陣列還可以通過索引值的方式進行初始化。

a := [3]int  //指定陣列大小為3,並通過索引值進行初始化,沒有初始化的元素使用型別預設值,              

//因此,a[0]=0, a[1]=1, a[2]=3

a := [...]int //不指定陣列長度,通過索引值進行初始化,陣列長度由最後乙個索引值確定,沒

//有指定索引值的元素被初始化為元素型別的預設值。最後乙個索引值為2,所以

//陣列長度為3,因此,a[0]=0, a[1]=1, a[2]=3

arr := [...]int //定義了乙個長度為100的整型陣列,除了最後乙個元素為-1外,該陣列的其他元

//素值都是0

如果乙個陣列的元素是可比較的,那麼這個陣列本身也是可比較的。這樣我們就可以直接使用 == 操作符來比較兩個陣列,比較的結果是兩個陣列的元素的值是否完全相同。使用 != 來比較兩個陣列是否不同。

a := [2]int

b := [...]int

c := [2]

fmt.println(a == b, a == c, b == c) //true false false

d := [3]int

fmt.println(a == d) //編譯錯誤:無法比較 [2]int == [3]int

當go語言中的陣列是值型別的,陣列賦值或是作為函式引數都是值拷貝。當呼叫乙個函式時,每個傳入的引數都會建立乙個副本,然後賦值給對應的函式形參,所以函式接受的是乙個副本,而不是原始的引數。由於go語言的陣列是值傳遞,使用這種方式傳遞大的陣列就會變得很低效,並且在函式內部對陣列的任何修改都只影響到副本,而不是原始陣列。而在其他語言(如c/c++語言)中,陣列是隱式地使用引用傳遞,也就是位址傳遞,這跟go語言的陣列是有區別的。

但是,我們可以顯式地傳遞陣列的位址即陣列指標給函式,這樣在函式內部對陣列的任何修改都會反映到元素陣列上面。下面的程式演示如何將乙個陣列 [32]byte 的元素清零。

func zero(ptr *[32]byte) 

}//或者

func zero(ptr *[32]byte)

}

(1)陣列建立完長度就固定了,陣列長度不可再改變。

(2)陣列是值型別,陣列賦值或是作為函式引數都是值拷貝。

(3)陣列長度是陣列型別的組成部分,[10]int 和 [20]int 表示不同型別的陣列。

(4)可以根據陣列建立切片。(詳見切片部分講解)

go語言中,可以使用 for...range 結構遍歷陣列元素。示例**如下:

var team = [...]

for i, v := range team

程式執行結果:

0 hammer

1 soldier

2 mum

當然,也可以先求出陣列長度,然後使用for迴圈來遍歷陣列。示例**如下:

var team = [...]

len := len(team) //使用len()函式計算陣列長度

for i:=0; i由於陣列長度的不可變性,除了在特殊情況下,應該盡量少使用陣列,建議使用可變長度的切片。

STL容器 array陣列

前言 c 11中引入了array容器,array是序列容器的一種。array很類似於一般的陣列,例如,array在棧上分配連續的記憶體來儲存元素,並且array的大小是不可以改變的,這也就是說,可以修改array中元素的值,但不能向array中插入和刪除元素 其次 array是原生陣列的封裝,它存放...

Go程式設計基礎 陣列array

陣列array 1 定 義 數 組 的 格 式 var n n 0 2 數 組 長 度 也 是 類 型 的一部分,因此 具 有 不 同 長 度 的陣列為 為 不 同 類 型 3 注 意 區 分 指 向 數 組 的 指標和 指 針 數 組 4 數 組 在go 中 為 值 類 型 5 數 組 之 間 可...

go語言基礎 陣列array

1.陣列 概念 儲存一組相同的資料型別的資料結構。特點 資料結構 記憶體上是連續空間。儲存資料特點 有序,可以重複。資料型別一致。定長 陣列一旦建立長度不能更改,但是可以更改儲存的資料。使用 建立陣列 var 陣列名 size 資料型別 0000000 var 陣列名 size 資料型別 陣列名 5...