golang基礎(chǔ)-4

數(shù)組Array

Golang Array和以往認(rèn)知的數(shù)組有很大不同印衔。

1. 數(shù)組:是同一種數(shù)據(jù)類型的固定長度的序列。
2. 數(shù)組定義:var a [len]int传趾,比如:var a [5]int垢粮,數(shù)組長度必須是常量浮定,且是類型的組成部分经柴。一旦定義抠藕,長度不能變。
3. 長度是數(shù)組類型的一部分勺阐,因此卷中,var a[5] int和var a[10]int是不同的類型。
4. 數(shù)組可以通過下標(biāo)進(jìn)行訪問渊抽,下標(biāo)是從0開始蟆豫,最后一個元素下標(biāo)是:len-1
for i := 0; i < len(a); i++ {
}
for index, v := range a {
}
5. 訪問越界,如果下標(biāo)在數(shù)組合法范圍之外懒闷,則觸發(fā)訪問越界十减,會panic
6. 數(shù)組是值類型,賦值和傳參會復(fù)制整個數(shù)組愤估,而不是指針帮辟。因此改變副本的值,不會改變本身的值灵疮。
7.支持 "=="织阅、"!=" 操作符,因為內(nèi)存總是被初始化過的震捣。
8.指針數(shù)組 [n]*T荔棉,數(shù)組指針 *[n]T闹炉。

1.1.1. 數(shù)組初始化:

一維數(shù)組:

全局:

    var arr0 [5]int = [5]int{1, 2, 3}
    var arr1 = [5]int{1, 2, 3, 4, 5}
    var arr2 = [...]int{1, 2, 3, 4, 5, 6}
    var str = [5]string{3: "hello world", 4: "tom"}

局部:

    a := [3]int{1, 2}           // 未初始化元素值為 0。
    b := [...]int{1, 2, 3, 4}   // 通過初始化值確定數(shù)組長度润樱。
    c := [5]int{2: 100, 4: 200} // 使用索引號初始化元素渣触。
    d := [...]struct {
        name string
        age  uint8
    }{
        {"user1", 10}, // 可省略元素類型。
        {"user2", 20}, // 別忘了最后一行的逗號壹若。
    }

代碼:

package main

import (
    "fmt"
)

var arr0 [5]int = [5]int{1, 2, 3}
var arr1 = [5]int{1, 2, 3, 4, 5}
var arr2 = [...]int{1, 2, 3, 4, 5, 6}
var str = [5]string{3: "hello world", 4: "tom"}

func main() {
    a := [3]int{1, 2}           // 未初始化元素值為 0嗅钻。
    b := [...]int{1, 2, 3, 4}   // 通過初始化值確定數(shù)組長度。
    c := [5]int{2: 100, 4: 200} // 使用引號初始化元素店展。
    d := [...]struct {
        name string
        age  uint8
    }{
        {"user1", 10}, // 可省略元素類型养篓。
        {"user2", 20}, // 別忘了最后一行的逗號。
    }
    fmt.Println(arr0, arr1, arr2, str)
    fmt.Println(a, b, c, d)
}

輸出結(jié)果:

[1 2 3 0 0] [1 2 3 4 5] [1 2 3 4 5 6] [   hello world tom]
[1 2 0] [1 2 3 4] [0 0 100 0 200] [{user1 10} {user2 20}]

多維數(shù)組

全局

var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}

局部:

a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 緯度不能用 "..."赂蕴。

代碼:

package main

import (
    "fmt"
)

var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}

func main() {
    a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
    b := [...][2]int{{1, 1}, {2, 2}, {3, 3}} // 第 2 緯度不能用 "..."柳弄。
    fmt.Println(arr0, arr1)
    fmt.Println(a, b)
}

輸出結(jié)果:

[[0 0 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0]] [[1 2 3] [7 8 9]]
[[1 2 3] [4 5 6]] [[1 1] [2 2] [3 3]]

值拷貝行為會造成性能問題,通常會建議使用 slice概说,或數(shù)組指針碧注。

package main

import (
    "fmt"
)

func test(x [2]int) {
    fmt.Printf("x: %p\n", &x)
    x[1] = 1000
}

func main() {
    a := [2]int{}
    fmt.Printf("a: %p\n", &a)

    test(a)
    fmt.Println(a)
}

輸出結(jié)果:

a: 0xc42007c010
x: 0xc42007c030
[0 0]

內(nèi)置函數(shù) len 和 cap 都返回數(shù)組長度 (元素數(shù)量)。

package main

func main() {
    a := [2]int{}
    println(len(a), cap(a)) 
}

輸出結(jié)果:

2 2

多維數(shù)組遍歷:

package main

import (
    "fmt"
)

func main() {

    var f [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}

    for k1, v1 := range f {
        for k2, v2 := range v1 {
            fmt.Printf("(%d,%d)=%d ", k1, k2, v2)
        }
        fmt.Println()
    }
}

輸出結(jié)果:

(0,0)=1 (0,1)=2 (0,2)=3 
(1,0)=7 (1,1)=8 (1,2)=9

利用方法修改數(shù)組的值,(地址傳遞):

package main

import "fmt"

func printArr(arr *[5]int) {
    arr[0] = 10
    for i, v := range arr {
        fmt.Println(i, v)
    }
}

func main() {
    var arr1 [5]int
    printArr(&arr1)
    fmt.Println(arr1) //arr1數(shù)組發(fā)生改變

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糖赔,一起剝皮案震驚了整個濱河市萍丐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌放典,老刑警劉巖逝变,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奋构,居然都是意外死亡骨田,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門声怔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來态贤,“玉大人,你說我怎么就攤上這事醋火∮破” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵芥驳,是天一觀的道長柿冲。 經(jīng)常有香客問我,道長兆旬,這世上最難降的妖魔是什么假抄? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上宿饱,老公的妹妹穿的比我還像新娘熏瞄。我一直安慰自己,他們只是感情好谬以,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布强饮。 她就那樣靜靜地躺著,像睡著了一般为黎。 火紅的嫁衣襯著肌膚如雪邮丰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天铭乾,我揣著相機與錄音剪廉,去河邊找鬼。 笑死炕檩,一個胖子當(dāng)著我的面吹牛妈经,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捧书,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骤星!你這毒婦竟也來了经瓷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤洞难,失蹤者是張志新(化名)和其女友劉穎舆吮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體队贱,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡色冀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柱嫌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锋恬。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖编丘,靈堂內(nèi)的尸體忽然破棺而出与学,到底是詐尸還是另有隱情,我是刑警寧澤嘉抓,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布索守,位于F島的核電站,受9級特大地震影響抑片,放射性物質(zhì)發(fā)生泄漏卵佛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望截汪。 院中可真熱鬧疾牲,春花似錦、人聲如沸挫鸽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丢郊。三九已至盔沫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枫匾,已是汗流浹背架诞。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留干茉,地道東北人谴忧。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像角虫,于是被迫代替她去往敵國和親沾谓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容