變數在一定程度上能滿足函式及**的要求。如果編寫一些複雜演算法、資料結構和邏輯,就需要更複雜的型別來實現。這類複雜型別一般情況下具有各種形式的儲存和處理資料的功能,將它們稱為「容器」。
陣列是一段固定長度的連續記憶體空間,由若干相同資料型別的元素組成的序列。
在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...