19. slice和數(shù)組很像乔外,但是slice可以添加元素

slice中文可以稱為“切片”。是Go語(yǔ)言為處理同類型數(shù)據(jù)序列提供的一個(gè)高效且方便的方式一罩。是在數(shù)組上抽象的一個(gè)數(shù)據(jù)類型杨幼。
切片的使用相當(dāng)?shù)膹V泛。
切片可以直接賦值聂渊,不用提前指定元素的個(gè)數(shù)差购。切片還可以動(dòng)態(tài)的增加元素。
一個(gè)slice也就是切片的聲明是這樣的

s := []int{1,1,2,3,5,8,13,21,34}

也可以使用make創(chuàng)建汉嗽,make創(chuàng)建slice時(shí)需要指定元素個(gè)數(shù)欲逃。

a := make([]int,0)

先指定為0個(gè)

package main

import (
    "fmt"
)

func main() {
    s := []int{1,1,2,3,5,8,13,21,34}
    a := make([]int,0)

    fmt.Println(s)
    fmt.Println(a)
}

運(yùn)行結(jié)果如下

[1 1 2 3 5 8 13 21 34]
[]

slice添加元素是這樣寫的

a = append(a, 55, 89)

這個(gè)append給slice a添加了2個(gè)整數(shù)。但是诊胞,其實(shí) = 左邊和右邊的a并不是同一個(gè)a了暖夭。
為了驗(yàn)證這兩個(gè)a已經(jīng)發(fā)生了根本的變化锹杈,我們來(lái)取得append前后a的內(nèi)存地址做比較。
不過(guò)迈着,因?yàn)槲覀冎奥暶鱝的時(shí)候竭望,沒(méi)有給a元素個(gè)數(shù),那么它那個(gè)時(shí)候還沒(méi)有分配內(nèi)存裕菠。我們先修改一下

a := make([]int,0)
修改為
a := make([]int,1)

看一下代碼示例

package main

import (
    "fmt"
)

func main() {
    s := []int{1,1,2,3,5,8,13,21,34}
    a := make([]int,1)

    fmt.Println(s)
    fmt.Println(a)

    fmt.Println(&a[0])
    a = append(a, 55, 89)
    fmt.Println(a)
    fmt.Println(&a[0])
}

運(yùn)行的結(jié)果是這樣的

[1 1 2 3 5 8 13 21 34]
[0]
0xc0420361d0
[0 55 89]
0xc04203c480

注意輸出的運(yùn)行結(jié)果中[0 55 89]前后兩個(gè)地址的不同咬清。當(dāng)然,在你的機(jī)器上的地址很可能與我的不同奴潘,那是因?yàn)槊看芜\(yùn)行時(shí)旧烧,環(huán)境不同就可能有不同的內(nèi)存分配過(guò)來(lái)。
既然兩個(gè)a是不同的變量(因?yàn)閍的內(nèi)存地址會(huì)發(fā)生變化画髓,通過(guò)地址訪問(wèn)會(huì)掉入邏輯錯(cuò)誤的坑里)掘剪,那么,下面的代碼就容易理解了奈虾。

    b := make([]int, 0)
    b = append(a, 144)
    fmt.Println(&b[0])

然后你再給 b = append()增加一個(gè)元素看看效果夺谁。然后再減掉剛增加的這個(gè)看看有什么變化。

    b := make([]int, 0)
    b = append(a, 144, 233)
    fmt.Println(&b[0])

是的肉微,看到了b的內(nèi)存地址的變化了匾鸥。這是因?yàn)樵瓉?lái)的slice對(duì)應(yīng)的容量不夠了,隨著slice元素的增加碉纳,又重新分配了內(nèi)存地址勿负。
所以,這里有一個(gè)結(jié)論劳曹,slice在內(nèi)存中保存的位置并不是穩(wěn)定奴愉,沒(méi)什么必要的話,不要用內(nèi)存地址或者指針玩slice铁孵,小心有坑躁劣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市库菲,隨后出現(xiàn)的幾起案子账忘,更是在濱河造成了極大的恐慌,老刑警劉巖熙宇,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳖擒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡烫止,警方通過(guò)查閱死者的電腦和手機(jī)蒋荚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)馆蠕,“玉大人期升,你說(shuō)我怎么就攤上這事惊奇。” “怎么了播赁?”我有些...
    開(kāi)封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵颂郎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我容为,道長(zhǎng)乓序,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任坎背,我火速辦了婚禮替劈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘得滤。我一直安慰自己陨献,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布懂更。 她就那樣靜靜地躺著湿故,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膜蛔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天脖阵,我揣著相機(jī)與錄音皂股,去河邊找鬼。 笑死命黔,一個(gè)胖子當(dāng)著我的面吹牛呜呐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悍募,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蘑辑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坠宴?” 一聲冷哼從身側(cè)響起洋魂,我...
    開(kāi)封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喜鼓,沒(méi)想到半個(gè)月后副砍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庄岖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年豁翎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隅忿。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡心剥,死狀恐怖邦尊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情优烧,我是刑警寧澤蝉揍,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站匙隔,受9級(jí)特大地震影響疑苫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纷责,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一捍掺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧再膳,春花似錦挺勿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至灾杰,卻和暖如春蚊丐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艳吠。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工麦备, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昭娩。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓凛篙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親栏渺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呛梆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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

  • 切片(slice)是 Golang 中一種比較特殊的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)更便于使用和管理數(shù)據(jù)集合磕诊。切片是圍繞動(dòng)態(tài)...
    小孩真笨閱讀 1,052評(píng)論 0 1
  • 數(shù)組Go語(yǔ)言中的數(shù)組是定長(zhǎng)的同一類型數(shù)據(jù)的集合填物,數(shù)組索引是從0開(kāi)始的。數(shù)組有以下幾種創(chuàng)建方式 以下是一些特殊數(shù)組 ...
    小杰的快樂(lè)時(shí)光閱讀 1,681評(píng)論 0 0
  • 切片是 Go 中的一種基本的數(shù)據(jù)結(jié)構(gòu)霎终,使用這種結(jié)構(gòu)可以用來(lái)管理數(shù)據(jù)集合融痛。切片的設(shè)計(jì)想法是由動(dòng)態(tài)數(shù)組概念而來(lái),為了開(kāi)...
    一縷殤流化隱半邊冰霜閱讀 11,248評(píng)論 21 55
  • 切片(slice)是 Golang 中一種比較特殊的數(shù)據(jù)結(jié)構(gòu)神僵,這種數(shù)據(jù)結(jié)構(gòu)更便于使用和管理數(shù)據(jù)集合雁刷。切片是圍繞動(dòng)態(tài)...
    51reboot閱讀 28,632評(píng)論 2 10
  • #我是一個(gè)可愛(ài)的搬磚工系列# 嘗試對(duì)照英文翻譯學(xué)習(xí)MD的組件設(shè)計(jì),借此加深各種組件的應(yīng)用~ Material De...
    軼子閱讀 1,958評(píng)論 0 7